【问题标题】:Swiftmailer working on localhost but not in productionSwiftmailer 在 localhost 上工作,但不在生产环境中
【发布时间】:2011-01-20 20:55:00
【问题描述】:

在我的本地主机(Linux Mint OS)上,Swiftmailer 可以正常使用以下代码,但是每当我将它移到我的服务器时,它只是挂在发送函数上,然后给我一个内部服务器错误。

我目前通过 Google Apps 设置电子邮件,所以 SMTP 可能不适用于这种情况?如果是这样,你建议我如何从 SMTP 更改它。

此外,每当我发送这样的电子邮件时,它都会在用户名区域显示发件人地址。我希望它与“setFrom”函数中的发件人地址一起显示。

//Include the swiftmailer class
require_once 'comm/swiftmailer/swift_required.php';

//Create a message
//Pass it as a parameter when you create the message
$message = Swift_Message::newInstance();
$message->setSubject('My Subject');
$message->setFrom(array('noreply@domain.com' => 'No Reply'));
$message->setTo(array('me@domain.com' => 'Me'));
$message->setBody($emailContent, 'text/html');

//Create transport class and email the message
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')->setUsername('useracctname')->setPassword('password');
$mailer = Swift_Mailer::newInstance($transport);
$result = $mailer->send($message);

非常感谢您的帮助!

【问题讨论】:

  • 你的服务器主机是谁?
  • 似乎您正在尝试将 gmail 用于您的 smtp,我知道 godaddy 对此有限制。
  • @kjy112:那么还有什么方法可以做到这一点? Swiftmailer 建议您使用 SMTP 而不是其他两种传输类型。但也许我需要用我的 DNS 区域编辑器更改一些设置,以便本地邮件服务器发送这些设置,而 gmail 帐户得到其余的?
  • 查看服务器日志以了解内部错误是什么。
  • @Pekka:我认为我无法访问任何日志。我尝试查看根目录,但没有看到任何突出的内容。

标签: php html-email swiftmailer


【解决方案1】:

这可能是服务器上的端口问题。可以关闭端口 465 以防止垃圾邮件。也可能是服务器的 PHP 版本缺少 SSL 支持。

我想知道,是不是我没有使用本地邮件服务器,所以它不允许 SMTP?

如果您像以前那样明确地处理 gmail,那么您使用其他传输类型或不同服务器的可能性很小。

另外,使用其他传输类型之一怎么样?

我认为 SMTP 是让它与 Gmail 一起运行的唯一选择。然而,它可能是您的服务器提供了基于mail() 的服务(显然,发件人地址与GMail 不同)。在这种情况下,您可以使用 Swiftmailer 的mail transport。

【讨论】:

  • 我的意思是我已经为谷歌应用程序设置了我的 MX 记录,这是否意味着 SMTP 被禁用?还是很可能是端口问题?抱歉,我对所有这些协议及其工作方式都不是很好。
  • 似乎 mail() 也被高度劝阻,所以我试图按照推荐的方式去做,你认为我可以使用 mail() 吗?
  • @Metropolis 您可能需要向您的提供商询问究竟出了什么问题,如果不知道 500 错误,调试起来非常困难。如果您发送少量邮件(没有批量邮件),mail() 可以。
  • @Pekka 我与主机交谈,他们确实阻止了端口!还有Pekka,你能回答我问题的第2部分吗?发件人地址在哪里显示为我的用户名/密码而不是 setFrom 地址?我也已经尝试过 setReplyto ,但这只是添加了两个地址。非常感谢您在这方面的帮助。
  • @Metropolis 你不应该也经常不能设置任意的“发件人”地址——它是垃圾邮件的主要标志之一,会被许多过滤器吞噬。如果需要使用GMail,又想指定不同的发件人地址,最好使用reply-to。
【解决方案2】:

我遇到了同样的问题:我可以在本地发送 gmail 电子邮件(更新配置后:https://www.google.com/settings/security/lesssecureapps),但不能在生产环境中发送。

为了解决我的问题,我已使用我的生产 ip 登录到我的 gmail 帐户 / 从我的生产服务器并回答了 gmail 安全问题。

使用生产 ip 登录到 gmail 帐户的一种解决方案是

  1. 打开 ssh 隧道 (ssh -2NfCT -D 5000 yoursshuser@yourdomain.org)
  2. 配置您的浏览器以使用该代理(例如 Firefox:至首选项 > 高级 > 网络 > 设置 > 手动代理配置 > SOCKS 主机:localhost / Post:5000 / SOCKS v5)
  3. 照常登录您的 gmail 帐户

Symfony 输出的错误是:

app.ERROR: Exception occurred while flushing email queue: Failed to authenticate on SMTP server with username "joe.doe" using 1 possible authenticators [] []

【讨论】:

    【解决方案3】:

    好吧,这就是解决方案。

    如果您发送 SMTP 邮件,您应该在服务器上创建电子邮件帐户,然后在您的代码中使用此电子邮件信息。 如果您没有有效的电子邮件帐户可以使用它发送,服务器将不会发送电子邮件 当您使用“来自”时。 这应该是一个真正正确的电子邮件帐户,一个假的。

    使用假账户发送邮件的唯一可能原因是使用 mail() 函数。

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2018-03-23
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多