8

SwiftMail 不发送我的电子邮件,但mail()确实有效。和这里一样。

我添加了 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);

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

4

7 回答 7

8

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

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

于 2012-05-16T12:10:56.487 回答
7

我有同样的问题。

根据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);

我希望它会帮助某人。

PS 我使用 Postfix 发送电子邮件。

于 2014-06-26T09:51:51.947 回答
6

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

于 2013-03-31T14:50:56.517 回答
2

看起来您正在使用根据他们的文档默认使用的默认传输机制mail()

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

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

来源

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

于 2012-05-16T12:45:52.710 回答
1

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

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

于 2014-02-18T15:06:31.540 回答
1

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

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

于 2017-07-15T00:04:09.850 回答
-2

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

例子:

$sname = 'noreply@system.com';
->setFrom(array($sname => 'Some Header Title here'));
于 2014-05-14T11:09:00.253 回答