2016-03-03 73 views
1

我有一个脚本每月运行一次cron作业,向客户发送awstats报告。我们最近不得不修改它,因为我们的出站邮件服务器收紧了限制。不幸的是,一些收件人在邮件正文中以原始html代码的形式接收报告。任何人都可以从剧本中知道我出错的地方吗?电子邮件脚本格式不正确

########################## 
## Call to get awstats 
########################## 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL,"http://www.$your_domain:2082/awstats.pl" 
     ."?month=$report_month&year=$report_year&output=main&config=$your_domain" 
     ."&lang=en&framename=mainright"); 
curl_setopt($curl, CURLOPT_USERPWD, "$user:$password"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
//$attachment = curl_exec($curl); 
$attachment = "<br /><br /><div align=\"center\"><a href=\"$logo_link\"><img src=\"$logo_path\" border=\"0\" /></a>\n"; 
$attachment .= "<br /><font color=\"#FF0000\"><b>AwStats Report for $your_domain ($report_monthname $report_year)</b></font></div>\n"; 
$attachment .= "<base href=\"$awstats_img_path\">\n"; 
$attachment .= curl_exec($curl); 
curl_close($curl); 

########################## 
## Call to send email 
########################## 

$subject = "AwStats Report for $your_domain ($report_monthname $report_year)"; 
$header = "From: " . $email_from . " <" . $email_from . ">\n"; 
$header .= "Reply-To: " . $email_from . "\n"; 
$header .= "MIME-Version: 1.0\n"; 
$header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\n\n"; 
$uid = md5(uniqid(time())); 
$message = "--" . $uid . "\n"; 
$message .= "Content-type:text/html; charset=iso-8859-1\n"; 
$message .= "Content-Transfer-Encoding: 7bit\n\n"; 
$message .= $attachment . "\n\n"; 
mail($email_to, $subject, $message, $header); 

我明显地忽略了这里的变量声明。但他们都在代码中。我实际上收到了一条消息,并且它在桌面上的Apple Mail中显示得很好。

感谢, CJ

+0

哪里?在前景? – devpro

+0

客户端可能正在使用outlook。我正在使用Mac Mail。 –

回答

1

你缺少的,这将导致一些客户端不能正确显示其电子邮件的结尾MIME边界。

的最后一行之前mail();

$message .= "--{$uid}--\n"; // terminate mime boundary 

编辑补充一点:后您的意见,我注意到另一个问题。

$header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\n\n"; 
$uid = md5(uniqid(time())); 

需要改为:

$uid = md5(uniqid(time())); 
$header .= "Content-Type: multipart/mixed; boundary=\"" . $uid . "\"\n\n"; 

边界原本是空这或许可以解释为什么有些邮件客户端没有显示正确。

+0

Hmmn,我按照你的建议添加了结尾并重新执行了cron。所以现在我得到了Mac Mail中的原始html。但是当我在webmail中检查客户的Horde帐户时,消息显示为“此消息部分包含HTML数据,但内联HTML显示被禁用。” 在新窗口中查看HTML数据。点击视图链接确实显示正确显示消息。所以现在桌子转了。不知道它将如何出现在Outlook中。我在我的Mac邮件程序中的FWIW我看到这个:Mime-Version:1.0 Content-Type:multipart/mixed; boundary =“” –

+0

看起来像额外的编辑做的伎俩。我只用2个客户端进行了测试,他们都能够读取消息。它也在Mac Mail中正确地再次出现。我会尝试与更多的客户,如果一切正常,我会标记解决方案是正确的。感谢您的帮助drew010。 –

相关问题