PHP邮件发送随机失败而不更改代码“在标头中找不到收件人地址”

时间:2015-01-21 23:04:26

标签: php email sendmail

编辑:审核后我发现循环中出现错误,这与标题无关。我把代码留在这里,这样可以帮助别人。


我编写了这个代码,用于发送电子邮件,通过按下按钮,它工作得很好,但在某些时候它随机停止而不更改它,显示对我没有意义的错误 {{ 1}} 即可。请注意,我已将No recipient addresses found in header放在代码的末尾,以便我可以看到正在为变量设置的内容。我一无所获。空的空间。 print $to;返回var_dump($to);

NULL

1 个答案:

答案 0 :(得分:1)

我注意到了一些问题。首先,你循环遍历并在每次迭代中设置$ to和$ header变量,这是多余的,并且还用不必要的重复内容填充$ header变量。它也不会为每次迭代发送一封电子邮件,而是将越来越多的邮件堆积到一封电子邮件中,并且可能无法正确格式化。此外,邮件功能中的$ to参数与" To:"不同。头。这可能是一个脚本或精明的管理员抓住了这个并要求" To:"标题将出现在电子邮件中。试试这个:

<?php 
require_once $_SERVER['DOCUMENT_ROOT'] .  "/common/config.php"  ; 
$id = $_GET['id'];
$table = $_GET['table'];
$q = mysql_query("SELECT * FROM $table WHERE loadID = '$id'");
$random_hash = md5(date('r', time())); 

$to = "noreply@example.com"; 
$headers = "To: $to\r\n";
$headers .= "From: dispatch@eagleexpress05.com\r\nReply-To: dispatch@eagleexpress05.com"; 
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\""; 

while($f = mysql_fetch_array($q)){
    $subject = 'Dispatch information on Load: '.$f['loadnumber'].' for Truck: '.$f['trucknum']; 

    ob_start(); 
    ?> 


    --PHP-alt-<?php echo $random_hash; ?>  
    Content-Type: text/html; charset="iso-8859-1" 
    Content-Transfer-Encoding: 7bit

    EMAIL CONTENT GOES HERE

    <?php
    --PHP-alt-<?php echo $random_hash; ?>--<?php
    $message = ob_get_clean(); 

    $mail_sent = @mail( $to, $subject, $message, $headers ); 
}

print $to;
?>