【问题标题】:SwiftMailer does not send mail, why?SwiftMailer 不发送邮件,为什么?
【发布时间】:2012-05-23 22:58:43
【问题描述】:

SwiftMail 不发送我的电子邮件,而 mail() 确实有效。与here相同。

我添加了 EchoLogger,但它没有打印任何内容。

$message = Swift_Message::newInstance();
$message->setSubject('Test');
$message->setTo( $email );
$message->setFrom(ABSENDER);
$message->setBody($nl_text);

$transport = Swift_MailTransport::newInstance();
$mailer = Swift_Mailer::newInstance($transport);

$logger = new Swift_Plugins_Loggers_EchoLogger();
$mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($logger));

$result = $mailer->send($message, $failures);
var_dump($failures);

邮件返回$failures,但为什么?

更新

Swift_Transport_SimpleMailInvoker::mail我把参数转储出来了:

  $headers =>
  string(208) "Message-ID: <1337173064.4fb3a4480b8dd@domain.de>
Date: Wed, 16 May 2012 14:57:44 +0200
From: news@domain.de
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
"
  $extraParams =>
  string(15) "-fnews@domain.de"

$to, $subject, $body 与我在mail() 中使用的相同。仍然不知道问题出在哪里。

更新 #2

这对我来说很好用:

mail($email, 'Test', $nl_text, "From: " . ABSENDER);

免责声明:这不是解决方案,而是我使用的解决方法,因为我没有时间调试框架并找到真正的解决方案。随意使用上面提供的信息来调试自己并在此处发布您的解决方案。我很乐意接受并投票。

【问题讨论】:

  • 你能解决这个问题吗?
  • 我的解决方案是用一个简单的mail($email, 'Anmeldung', $nl_text, "From: " . ABSENDER); 替换它,但它并没有解决问题,所以我投了反对票,最后删除了我的答案。这个问题需要一些调试,但我没有时间。
  • 很好,您应该将其发布为答案。

标签: php email swiftmailer


【解决方案1】:

我建议您使用调试器并单步执行 send() 背后的代码。

如果您不能使用调试器,您应该查看lib/classes/Swift/Transport/SimpleMailInvoker.php 中的函数mail。使用shutup 操作符(´@´) 调用内部邮件功能。也许删除此运算符可以向您显示错误消息。您也可以使用var_dump() 转储那里传递的参数。

【讨论】:

    【解决方案2】:

    看起来您正在使用according to their docs 默认使用mail() 的默认传输机制。

    使用此 Transport 时的严重缺点是:

    • 不可预测的邮件标头
    • 缺乏关于交付失败的反馈
    • 缺乏对需要实时交付反馈的几个插件的支持

    source

    如果我在调试它,我会找到 SwiftMailer 的 mail() 函数实现,并转储它传递的参数,并将它们与您自己的工作版本 mail() 进行比较。我对 SwiftMailer 没有任何经验,但这似乎是一个快速的选择。

    【讨论】:

    • 我做到了(见更新)。我仍然认为我直接使用邮件。感谢您的努力!
    • 您已经排除了罪魁祸首在 $to、$subject 或 $body 中的可能性。使用与 SwiftMailer 生成的完全相同的标题(您不应该收到电子邮件)。然后,逐个删除每个标头并重新测试,直到找到导致其失败的标头或标头。如有必要,重复使用 $extraParams。从那里你会知道具体的问题是什么,并有能力寻找比mail()更好的解决方案:)
    【解决方案3】:

    我能够修复它。我在标头中使用 noReply@mydomain.com 并且未创建此电子邮件帐户。我创建了 noReply@mydomain.com 并且我的电子邮件开始工作。我希望这对某人有所帮助。

    【讨论】:

    • 有趣的是,这对我有用。发件人字段中不存在的电子邮件地址将不会被递送
    • 是的 - (这里是 Swift 的老用户)非常烦人,如果没有有效的“回复”,它就会失败,没有错误
    【解决方案4】:

    问题出在Swift_Transport_MailTransport, private $_extraParams = '-f%s'

    标志'-f'(请参阅您的代码:string(15) "-fnews@domain.de")在某些情况下会失败。 Code Igniter 也有同样的“bug”。

    【讨论】:

    • 谢谢,你能添加mote信息吗?什么时候失败?链接到 Code Igniter 错误,... 现在这并没有解释问题是什么,也没有解释如何解决它。
    【解决方案5】:

    这可能真的很老了,我在使用 shorter from 电子邮件时解决了同样的问题。 @ 符号后的最大长度似乎是 10。这是我到目前为止测试过的。

    示例:

    $sname = 'noreply@system.com';
    ->setFrom(array($sname => 'Some Header Title here'));
    

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题。

      根据文档swiftmailer.org,默认情况下 Swift_MailTransport::newInstance() 使用参数-f%s,这就是为什么你得到"-fnews@domain.de",来解决-f %s 之间的空白。

      您的代码现在可能如下所示: $message = Swift_Message::newInstance('-f %s');

      我解决了这个问题,只需将 null 传递给 __construct()。所以我的工作代码是这样的:

      $message = Swift_Message::newInstance(null);

      我希望它会对某人有所帮助。

      附:我使用 Postfix 发送电子邮件。

      【讨论】:

        【解决方案7】:

        我在 symfony 上发现如果我只是用 "exit()" 退出函数,swiftmailer 不会发送邮件,但如果我以

        结束

        返回新的响应();它发送良好。所以我不确定。

        【讨论】:

        • 据我回忆,邮件已排队,仅在内核终止时发送。所以这是正常的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-04
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多