5

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 上工作,请分享你所做的。

4

6 回答 6

13

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

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

于 2011-08-24T05:07:26.830 回答
4

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

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

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

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

于 2014-01-02T03:47:35.423 回答
1

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

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

于 2013-09-09T12:43:46.467 回答
0

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

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

于 2011-08-24T10:06:14.467 回答
0

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

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

于 2014-09-17T03:47:55.287 回答