0

好的,我有点绕圈子,我想做的很简单。我有一个网页,它将信息从 API 提取到一个对象中,遍历各种对象并在简单的 html 表中显示信息。

现在,当我加载页面时,此信息会按预期显示。里面有很多内容。

我想要做的是设置一个 cron 作业以基于此 php 页面通过电子邮件发送每日报告。使用标准 HTML,它似乎可以正常工作,当我使用动态 php 代码时,它似乎把事情搞砸了。

最初我尝试使用标准 php 邮件,这只是显示源代码,有人建议将 file_get_contents 与 phpmailer 一起使用,这就是我现在的位置,但我有点超出我的深度。我应该做某种转义或编码/解码吗,整个想法是我不必逐行转义代码,所以我希望不是:(

这是我正在运行的代码片段:

<body>

<?php

$username = 'xxx@gmail.com';
$password = 'xxx';

$url ='xxx.atlassian.net/rest/api/2/search?jql=project+%3D+bug+AND+updated+%3C%3D+2d+AND+status+%3D+%22In+Beta%22+AND+assignee+!%3D+beta_merge+ORDER+BY+priority+DESC';

$curl = curl_init();
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);

$issue_list = curl_exec($curl);
$issue_json = json_decode($issue_list);
//var_dump($issue_json);
$bugs = $issue_json->issues;


?>
<h2>Table 1</h2>
<table cellspacing="0" cellpadding="3" width="80%">
    <?php foreach ($bugs as $bug)
            {?>
                <tr>
<td><?php echo $bug->fields->issuetype->iconUrl; ?></td>
</tr>


            <?php } ?>
    </table>

现在,如果我加载页面,我会看到:

表格1

http://www.xxx.com/images/bug_16.png

http://www.xxx.com/images/bug_16.png

http://www.xxx.com/images/feature_16.png

http://www.xxx.com/images/bug_16.png

但如果我运行这个:

<?php

//error_reporting(E_ALL);
error_reporting(E_STRICT);

date_default_timezone_set('America/Toronto');

require_once('../class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();

$body             = file_get_contents('jira_filters.php');
//$body             = preg_replace('/[\]/','',$body);

$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "smtp.gmail.com"; // SMTP server
$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server
$mail->Username   = "xxx@gmail.com";  // GMAIL username
$mail->Password   = "xxx";            // GMAIL password

$mail->SetFrom('xxx@gmail.com', 'First Last');

$mail->AddReplyTo("xxx@gmail.com","First Last");

$mail->Subject    = "PHPMailer Test Subject via smtp (Gmail), basic";

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$address = "xxx@him.net";
$mail->AddAddress($address, "John Doe");

$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

?>

然后这是我在电子邮件到达时看到的输出:

issues; ?> 

Table 1

fields->issuetype->iconUrl; ?>

我只想让电子邮件准确显示我在加载页面时在浏览器中看到的内容。有没有一种简单的方法可以做到这一点,尝试搜索但发现很难描述我想要做什么,因为我不知道它是否可以使用 phpmailer 或者我是否需要编码等?

4

1 回答 1

1

您没有运行该文件,只是从字面上获取文件的内容并将它们作为电子邮件正文放置。

试试这个:

ob_start();
include 'jira_filters.php'; //execute the file as php
$body = ob_get_clean();

ob_start()使得每个正常的回显和直接 html、文本等(<?php标签外的东西)都被缓冲而不是被输出到某个地方。然后,您可以使用 获取缓冲区中的内容ob_get_clean(),并将作为电子邮件发送。

于 2012-12-12T01:35:58.390 回答