【问题标题】:Two emails when sent via SMTP通过 SMTP 发送的两封电子邮件
【发布时间】:2009-05-12 18:15:54
【问题描述】:

我使用了两个 PHP 电子邮件脚本并通过我的 SMTP 服务器路由它,虽然它发送了两封相同的电子邮件。

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

任何想法为什么会发生这种情况?

【问题讨论】:

  • 你有代码要显示吗?
  • 我正在使用 PHPMailer 或 PHPClasses 上的顶级 PHP 电子邮件类。所有标准代码,未经我修改。这两种情况都会发生,但仅在我使用 SMTP 时才会发生。
  • 听起来问题出在您的 SMTP 服务器的配置上,而不是您的 PHP 代码。
  • 是的。有什么想法可以解决这个问题,任何公共区域,或者我应该联系我的主人吗?
  • 我以前用过PHPMailer,它很不错。如果您绝对没有调用两次方法,我会检查您的 SMTP 日志(如果可能)和/或向主机查询

标签: php email smtp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    所以如果你只使用 PHPMailer 而不编辑它的代码,这不是你的脚本的错。也许检查您的 SMTP 服务器的配置?

    【讨论】:

      【解决方案3】:
      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!
          }
      }   
      

      这是目前的功能

      【讨论】:

      • 您可能希望将其发布为对原始帖子的编辑,而不是作为您问题的“答案”。
      【解决方案4】:

      根据您的代码,如果是错误的类,您可能会收到两次“消息发送正常”(但我不明白为什么会发生这种情况)。如果您不这样做,那么我会查看您的 SMTP 服务器(可能通过致电支持)。

      我假设您已禁用回复以排除这种情况下的原因?注意:我并不是说这会影响任何事情(除了您可能被归类为垃圾邮件)。

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

      【讨论】:

        【解决方案5】:

        我同意 da5id 所说的,你为什么不把第二条错误信息拿出来。您是否进一步检查了接收者是否真的收到 2 条消息?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-08-22
          • 2012-09-03
          • 2014-01-21
          • 2019-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多