从php使用sendmail命令时,电子邮件标题“格式错误”。为什么?

时间:2012-02-22 03:40:32

标签: php sendmail malformed

我遇到了sendmail命令的问题。

我正在从数据库调用中提取值,它们看起来很好。 mail命令如下所示:

sendmail(urldecode($row['tracker']),urldecode($row['recipient']),urldecode($row['docurl']),urldecode($row['last_accessed']));

function sendmail($vtracker,$vrecip,$vrawurl,$viewed){
    $to = $vtracker;
    $subject = $vrecip . " has viewed the presentation you sent them.</br>";
    $body= "Full document url:  " . $vrawurl . "<br/>".
    "Time and Date Viewed:  :" .$viewed ;

    if (!mail($to, $subject, $body)) {
       echo("<p>Message delivery failed...</p>");
    }
}

我回应了所有变量,它们看起来还不错:

$vtracker:  Bob ;
$vrecip : gregmcg@yahoo.com ;
$vrawurl : https://docs.google.com/a/advetel.com/present/edit?id=0Ac_KwUsBMiw8ZGN2Z3N3cDlfMTc3c2Jubng0Z2Q ;
$viewed : Mon, 20 Feb 2012 10:36:22 CST ;

我收到一个错误(从服务器上的错误日志中检索到),看起来像这样。

[error] [client 66.249.68.23] File does not exist: /var/chroot/home/content/m/3/s/m3sglobal/html/broadband/missing.html
[Tue Feb 21 20:17:15 2012] [error] [client 70.113.8.83] Failed loading /usr/local/zo/4_3/ZendOptimizer.so:  /usr/local/zo/4_3/ZendOptimizer.so: undefined symbol: empty_string
[Tue Feb 21 20:17:17 2012] [error] [client 70.113.8.83] malformed header from script. Bad header=/home/content/m/3/s/m3sglobal/: Nitrofill_Presentation.php

为什么标题“格式错误”?

1 个答案:

答案 0 :(得分:1)

我认为在RFC 2822上多花一点时间并不会有什么坏处。

您的to字段中填充了Bob。这不是一个合法的地址。有效电子邮件地址的格式非常复杂,但现在,地址的格式通常为localpart@domain。 (通常不支持通过%用户名说明符或!爆炸路径传递到UUCP地址的较旧格式;此外,username@[<ip address>]可能支持也可能不支持通常,电子邮件地址中必须有@才能将本地部分与域分开。)

您似乎也在使用用户提供的数据,但未确认其未执行header injection attacks。 (另请参阅suhosin project's documentation about suhosin.mail.protect。)

您的subject字段包含</br>,这是毫无意义的,因为Subject:标题被解释为纯文本。该字段似乎也使用数据库提供的原始数据。

邮件正文还包含</br>,这是毫无意义的,因为您的邮件中不包含任何MIME标记,表明存在text/html content