PHP邮件显示错误“unexpected_data_after_address @ .syntax-error”

时间:2014-05-13 11:04:04

标签: php mysql

我写php代码发送邮件

$to = $sql_sender_final['email'];
$from = "first+$form[2]+$form[1]+$conversion@example.in<first@example.in>";

$headers = "From: $from\n";

$subject = "Re:New Message";
$message =  $body_new;

mail($to, $subject, $message, $headers);

然后我编写一个代码,通过IMAP

从邮件“first@example.in”获取数据

所有其他获取的数据显示良好除了它显示错误像这样

(!)注意:未知:地址末尾的意外字符:&lt; abc @ example 。在&GT; (errflg = 3)在第0行的未知中

(!)注意:未知:地址末尾的意外字符:&lt; def@example.in> (errflg = 3)在第0行的未知中

我在谷歌上研究了很多关于这个错误但是我不能成功

1 个答案:

答案 0 :(得分:1)

我也遇到过这个问题,我认为只有当显示的名称是电子邮件格式以及电子邮件时才会发生这种情况:some@ema.il <some@ema.il>。我正在使用php-imap/php-imap包,它在内部使用imap_* PHP函数,所以可能是低级错误(功能?)。

我只是在解析消息并记录IMAP错误后进行过滤:

/* @var $mailbox \PhpImap\Mailbox */
$mail = $mailbox->getMail($msgId, false);

// This will handle IMAP errors and will not trigger PHP notice
// You can log it somewhere in your own way.
$imapErrors = array_unique(array_filter(array_merge(
    (array) imap_errors(),
    (array) imap_alerts()
)));

然后$mail->getTo()$mail->getCc()可以使用以下内容进行过滤:

function filterValidEmails(array $emails)
{
    $validEmails = [];

    foreach ($emails as $email => $name) {
        if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $validEmails[$email] = $name;
        }
    }

    return $validEmails;
}