【问题标题】:Using Zend Mail with SMTP Authentication gives an error将 Zend Mail 与 SMTP 身份验证一起使用会出错
【发布时间】:2012-09-26 15:26:30
【问题描述】:

我正在尝试创建一个使用 SMTP 身份验证发送电子邮件的表单,但我一直收到错误消息。我已经在网上阅读了很多帖子,这是我到目前为止提出的代码。有人看到下面的代码有什么问题吗?任何帮助将不胜感激。

谢谢 鲍勃

$configSMTP = array(  
    'port' => 587,  
    'auth' => 'login',  
    'username' => '***',  
    'password' => '***'  
);

$transport = new Zend_Mail_Transport_Smtp('mail.server.com', $configSMTP);  
$mail = new Zend_Mail();

$mail->setReplyTo($config['replyto']);  
$mail->setBodyText($message);  
$mail->setFrom($params[$config['emailID']], $params[$config['nameID']]);  
$mail->addTo($config['sendto']);  
$mail->setSubject($config['subject']);

try {  
    $mail->send($transport);  
} catch(Exception $ex) {  
    Mage::getSingleton('core/session')->addError('There was an error submitting your  request.');
}

【问题讨论】:

    标签: zend-framework email zend-mail


    【解决方案1】:

    可能会指导您从 Zend Mail 中的resource plugins 部分。提供更好的选项列表,并说明如何通过 app.ini 文件分配它们。

    也就是说,假设您的论点是有效的,这看起来很好。

    你发现了什么异常?您一定会收到一条错误消息。你能从这台机器telnet到你的邮件服务器吗?想要消除网络/身份验证问题。

    【讨论】:

      【解决方案2】:

      如果不知道您遇到了什么异常,很难说。

      可能有几个原因,你能连接到 SMTP 服务器吗.. 端口 587 真的打开了吗?您是否有防火墙,如果有,是否会阻止与该端口的连接?您真的确定这些凭据有效吗?您是否尝试过手动连接到 SMTP 服务器?

      如果没有,请查看如何使用 Telnet:How to test an SMTP server using Telnet

      您也可以尝试使用交易电子邮件服务。这样您就不需要管理 SMTP 服务器,甚至不需要考虑可交付性等问题。您只需将其外包给其他人。

      有各种各样的提供者,其中一些是:

      如果您使用的是 AlphaMail,您可以只使用 AlphaMail PHP 客户端并发送您的电子邮件,如下例所示:

      include_once("comfirm.alphamail.client/emailservice.class.php");
      
      $email_service = AlphaMailEmailService::create()
          ->setServiceUrl("http://api.amail.io/v1")
          ->setApiToken("YOUR-ACCOUNT-API-TOKEN-HERE");
      
      $person = new stdClass();
      $person->userId = "1234";
      $person->firstName = "John";
      $person->lastName = "Doe";
      $person->dateOfBirth = 1975;
      
      $response = $email_service->queue(EmailMessagePayload::create()
          ->setProjectId(12345) // You AlphaMail project (determines template, options, etc)
          ->setSender(new EmailContact("Sender Company Name", "from@example.com"))
          ->setReceiver(new EmailContact("Joe Doe", "to@example.org"))
          ->setBodyObject($person) // Any serializable object
      );
      

      模板是在 AlphaMail 仪表板中使用Comlang 模板语言构建的。这意味着您可以随时轻松地编辑您的电子邮件,而无需深入研究代码。 Comlang 中的模板类似于:

      <html>
          <body>
              <b>Name:</b> <# payload.firstName " " payload.lastName #><br>
              <b>Date of Birth:</b> <# payload.dateOfBirth #><br>
      
              <# if (payload.userId != null) { #>
                  <a href="/sign-up">Sign Up Free!</a>
              <# } else { #>
                  <a href="/login?id=<# payload.userId #>">Sign In</a>
              <# } #>
          </body>
      </html>
      

      【讨论】:

        【解决方案3】:

        Mandril 的 SMTP 使用 TLS。

        http://help.mandrill.com/entries/21738477-What-SMTP-ports-can-I-use-

        在您的配置数组中启用它。

        $configSMTP = array(
            'ssl' => 'tls',  
            'port' => 587,  
            'auth' => 'login',  
            'username' => '***',  
            'password' => '***'  
        );
        

        【讨论】:

          猜你喜欢
          • 2017-05-29
          • 2015-04-29
          • 1970-01-01
          • 1970-01-01
          • 2021-05-08
          • 2012-03-22
          • 1970-01-01
          • 1970-01-01
          • 2019-01-03
          相关资源
          最近更新 更多