Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过SMTP发送两封电子邮件_Php_Email_Smtp - Fatal编程技术网

Php 通过SMTP发送两封电子邮件

Php 通过SMTP发送两封电子邮件,php,email,smtp,Php,Email,Smtp,我使用了两个PHP电子邮件脚本并通过SMTP服务器进行路由,当我这样做时,它会发送两封相同的电子邮件 当我使用mail()时,这种情况不会发生,但我更愿意使用SMTP 知道为什么会发生这种情况吗?如果您多次设置“收件人”和/或“收件人”标题,SMTP服务器可能会将其解释为单独的电子邮件地址,因此您将收到多封电子邮件 我建议使用PEAR邮件类。使用非常简单,可以为您处理大部分工作。它支持多个后端,包括SMTP。同样,如果您想扩展类来发送HTML电子邮件,Mail_Mime类可以很好地处理这一问题,

我使用了两个PHP电子邮件脚本并通过SMTP服务器进行路由,当我这样做时,它会发送两封相同的电子邮件

当我使用mail()时,这种情况不会发生,但我更愿意使用SMTP


知道为什么会发生这种情况吗?

如果您多次设置“收件人”和/或“收件人”标题,SMTP服务器可能会将其解释为单独的电子邮件地址,因此您将收到多封电子邮件

我建议使用PEAR邮件类。使用非常简单,可以为您处理大部分工作。它支持多个后端,包括SMTP。同样,如果您想扩展类来发送HTML电子邮件,Mail_Mime类可以很好地处理这一问题,提供设置纯文本正文和HTML正文的方法(如果收件人不支持HTML)


这是目前为止的函数

因此,如果只使用PHPMailer而不编辑其代码,那不是脚本的错。也许可以检查您的SMTP服务器的配置?

根据您的代码,如果是类出了问题,您可能会收到两次“Message Sent OK”(Message Sent OK)(我不明白为什么会发生这种情况)。如果您没有,那么我将查看您的SMTP服务器(可能通过呼叫支持)

我假设你已经禁用了“回复”功能,以排除它是本例中的原因?注意:我并不是说这会影响任何事情(除了你可能被归类为垃圾邮件)


顺便说一句,我从PHPMailer搬到了一段时间以前&从未回头。如果您没有从支持中获得任何乐趣,那么我至少会尝试使用Swift Mailer进行测试。

我同意da5id所说的,为什么不删除第二条错误消息呢。你进一步检查了接收者是否真的收到了2封邮件吗?

你有什么代码要显示吗?我正在使用phpMail或phpClass上的顶级PHP电子邮件类。所有标准代码,我不修改。这两种情况都会发生,但只有在我使用SMTP时才会发生。听起来问题在于SMTP服务器的配置,而不是PHP代码。是的。你知道我该如何解决这个问题吗?有什么共同的地方吗?或者我应该联系我的主机吗?我以前用过PHPMailer,它很不错。如果您肯定没有两次调用某个方法,我会检查您的SMTP日志(如果可能)和/或主机查询您可能希望将此作为对原始帖子的编辑,而不是作为问题的“答案”。
function send_email($from, $fromname, $to, $subject, $body, $alt = '')
{
    require_once('class.phpmailer.php');
    //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

    $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch

    $mail->IsSMTP(); // telling the class to use SMTP

    try
    {
        $mail->Host       = 'localhost'; // SMTP server
        $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
        //$mail->AddReplyTo($from, $fromname);
        $mail->AddAddress($to);
        $mail->SetFrom($from, $fromname);
        $mail->Subject = $subject;
        //$mail->AltBody = $alt; // optional - MsgHTML will create an alternate automatically
        $mail->MsgHTML($body);
        $mail->Send();
        echo 'Message Sent OK';
    }
    catch (phpmailerException $e)
    {
        echo $e->errorMessage(); //Pretty error messages from PHPMailer
    }
    catch (Exception $e)
    {
        echo $e->getMessage(); //Boring error messages from anything else!
    }
}