SwiftMailer不发送邮件,为什么?

时间:2012-05-16 11:27:10

标签: php email swiftmailer

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

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

7 个答案:

答案 0 :(得分:8)

我建议您使用调试器并逐步完成send()后面的代码。

如果您无法使用调试器,则应查看mail中的lib/classes/Swift/Transport/SimpleMailInvoker.php函数。有一个关闭运算符('@')调用内部邮件功能。也许删除此运算符可以显示错误消息。您也可以使用var_dump()转储在那里传递的参数。

答案 1 :(得分:6)

我能够解决它。我在标题中使用了noReply@mydomain.com,并且未创建此电子邮件帐户。我创建了noReply@mydomain.com,我的电子邮件开始工作了。我希望这有助于某人。

答案 2 :(得分:6)

我遇到了同样的问题。

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

您的代码现在看起来像这样: -f %s;

我只是将$message = Swift_Message::newInstance('-f %s')传递给__construct()解决了这个问题。所以我的工作代码看起来像这样:

null;

我希望它会帮助别人。

P.S。我使用Postfix发送电子邮件。

答案 3 :(得分:2)

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

使用此传输时的严重缺点是:

  • 不可预知的邮件标题
  • 缺乏有关投放失败的反馈
  • 缺少对需要实时传递反馈的多个插件的支持

source

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

结束

返回新的Response();它送好了。所以我不确定。

答案 6 :(得分:-2)

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

示例:

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