【问题标题】:HostGator Won't Send Mail via PHP SwiftMail APIHostGator 不会通过 PHP SwiftMail API 发送邮件
【发布时间】:2011-11-02 11:48:24
【问题描述】:

SwiftMail API for PHP 不能在 HostGator 上运行有什么原因吗?他们的技术支持人员说使用 mail() 命令并且到端口 25 的套接字连接在他们的共享主机计划中不会像那样工作。我抱怨说,当你在谷歌上搜索如何使用 mail() 发送附件时,人们会告诉你使用 SwiftMail。 我需要通过电子邮件发送文件附件。

我的代码在 A2Hosting 上运行良好,但在 HostGator 上运行良好。在 API 中,我在端口 25 上发送到 localhost,不使用身份验证,不使用 SSL,并且使用此主机上确实存在的有效电子邮件地址(假装它是 example.com)—— noreply@example.com。

我得到的错误是:

Warning: fsockopen() [function.fsockopen]: unable to connect to localhost:25 (Connection refused) in /home/user/public_html/mywebsite/addons/swiftmail-4.0.3/lib/classes/Swift/Transport/StreamBuffer.php on line 243

Fatal error: Uncaught exception 'Swift_TransportException' with message 'Connection could not be established with host localhost [Connection refused #111]' in /home/user/public_html/mywebsite/addons/swiftmail-4.0.3/lib/classes/Swift/Transport/StreamBuffer.php:245 Stack trace: #0 /home/user/public_html/mywebsite/addons/swiftmail-4.0.3/lib/classes/Swift/Transport/StreamBuffer.php(80): Swift_Transport_StreamBuffer->_establishSocketConnection() #1 /home/user/public_html/mywebsite/addons/swiftmail-4.0.3/lib/classes/Swift/Transport/AbstractSmtpTransport.php(111): Swift_Transport_StreamBuffer->initialize(Array) #2 /home/user/public_html/mywebsite/addons/swiftmail-4.0.3/lib/classes/Swift/Mailer.php(84): Swift_Transport_AbstractSmtpTransport->start() #3 /home/user/public_html/mywebsite/mailer.php(34): Swift_Mailer->send(Object(Swift_Message)) #4 /home/user/public_html/mywebsite/mailer.php(146): Mailer->sendMail() #5 {main} thrown in /home/user/public_html/mywebsite/addons/swiftmail-4.0.3/lib/classes/Swift/Transport/StreamBuffer.php on line 245

如果您已经让 SwiftMail API 在 HostGator 上工作,请分享您所做的。

【问题讨论】:

    标签: php email swiftmailer


    【解决方案1】:

    您可以尝试使用Swift_MailTransport 而不是Swift_SmtpTransport,这将在后台使用本机mail() 调用。

    我没有使用 HostGator 的经验,但如果他们的支持人员说系统允许通过 mail() 发送邮件,这应该可以正常工作。

    【讨论】:

      【解决方案2】:

      我进行了一些测试,最终找到了答案。它确实有效,但方法如下:

      • 使用端口 25,而不是备用端口
      • 不要使用 SSL/TLS
      • 没有必要使用用户/通行证,但不管有没有它都可以使用
      • 不要使用 'localhost' -- 使用邮件帐户所在域的名称,无论是根域、插件域、子域还是停放域
      • 确保发送电子邮件帐户存在,并且存在于您想要的域上下文中。例如,我可能将 example1.com 作为根域,并将 example2.com 作为我项目的插件域。因此,在我的项目代码中,我将在 cPanel 中创建一个 noreply@example2.com 帐户,然后将其用作 SwiftMailer API 的发送电子邮件地址。

      【讨论】:

      • 这几乎会发生在任何托管帐户上。您可以通过向 noreply 发送电子邮件来进行调试(最后没有 domain.com),但它不会在托管帐户上运行,您不仅需要添加 domain.com,还需要创建邮件帐户。
      • 任何想法我无法使用 swift mailer 在 hostgator 上发送邮件,但我能够使用 gmail smtp 服务器从 localhost 发送邮件,我认为 $transport = Swift_MailTransport::newInstance(Outgoing服务器名称, 25);在这一行中,输出返回 false。
      【解决方案3】:

      事实证明,如果您尝试发送到您的 CPanel 中的域,即使您在其他地方托管了电子邮件,他们的邮件服务器也会尝试将邮件中继到本地邮箱,而不是查询域的 MX 记录.

      解决方法是告诉他们从他们的 exim 邮件服务器配置文件中的 localhost 选项中删除您尝试通过电子邮件发送的域。

      【讨论】:

        【解决方案4】:

        我正在使用 SwiftMail for PHP 和 hostgator,Swift_SmtpTransport 通过 ssl 连接到 gmail。起初我收到“无法与主机 smtp.gmail.com 建立连接 [连接被拒绝 #111]”。使用 Swift_MailTransport 确实有效,但我不喜欢那个解决方案,因为它会使用 hostgator 的邮件服务器;我想使用谷歌应用程序电子邮件帐户发送电子邮件。

        我不得不要求 HostGator 的技术支持将 cPanel 用户列入 SMTP 防火墙中的白名单,然后一切正常。

        【讨论】:

          【解决方案5】:

          使用此主机上确实存在的有效电子邮件地址(假装它是 example.com) -- noreply@example.com.

          你确定邮件服务器在同一个盒子上吗?你有没有尝试挖掘example.com的mx记录

          【讨论】:

            【解决方案6】:

            我在尝试使用亚马逊的简单邮件服务发送电子邮件时收到此错误。最终结果证明我使用 AmazonSES 的凭证是错误的。一旦我做对了,一切都会为我解决。

            顺便说一句,我使用的是 PHP 的 Swift_SmtpTransport

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-12-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-07-13
              • 2012-12-01
              相关资源
              最近更新 更多