SwiftMailer не отправляет почту, почему?

SwiftMail не отправляет мою электронную почту, в то время как mail() работает. То же самое, что здесь.

я добавил Эхологгер, но он ничего не печатает.

$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 ответов


у меня была та же проблема.

согласно документации swiftmailer.org по умолчанию Swift_MailTransport:: newInstance () использует параметры -f%s и именно поэтому вы получили "-fnews@domain.de", чтобы решить это место пробел между -f %s.

ваш код теперь может быть похоже, что: $message = Swift_Message::newInstance('-f %s');

я решил эту проблему просто передает null to _ _ construct (). Поэтому мой рабочий код выглядит так:

$message = Swift_Message::newInstance(null);

I надеюсь, это кому-то поможет.

P. S. Я использую postfix для отправки писем.


Я предлагаю вам использовать отладчик и шаг через код, отправить().

Если вы не можете использовать отладчик, вы должны посмотреть на функцию mail на lib/classes/Swift/Transport/SimpleMailInvoker.php. Происходит вызов функции внутренней почты с оператором shutup (@). Возможно, удаление этого оператора может показать вам сообщение об ошибке. Также вы можете использовать var_dump() для сброса параметров, переданных там.


Я смог это исправить. Я использовал noReply@mydomain.com in from header и эта учетная запись электронной почты не была создана. Я создал noReply@mydomain.com и мои письма начали работать. Надеюсь, это кому-то поможет.


Похоже, вы используете механизм транспорта по умолчанию, который по документам использует mail() по умолчанию.

серьезными недостатками при использовании этого транспорта являются:

  • непредсказуемые заголовки сообщений
  • отсутствие обратной связи по поводу непоставок
  • отсутствие поддержки нескольких плагинов, требующих доставки в реальном времени обратная связь

источник

Если бы я отлаживал это, я бы нашел реализацию SwiftMailer mail() функция и дамп аргументы, которые она передает, и сравните их с вашей собственной рабочей версией mail(). У меня нет опыта работы с SwiftMailer, но это кажется быстрым вариантом.


проблема Swift_Transport_MailTransport, private $_extraParams = '-f%s'.

флаг '-f' (см. код: string(15) "-fnews@domain.de") потерпит неудачу в некоторых ситуациях. Код воспламенителя имеет тот же"баг".


Я узнал на symfony, если я просто выхожу из функции с помощью " exit ()", например, swiftmailer не будет отправлять почту, но если я закончил с

return new Response (); он отправляет нормально. поэтому я не уверен.


Это может быть очень старым, была та же проблема, которую я решил при использовании короче С Эл.почта. кажется, что максимальная длина после знака @ равна 10. это то, что я проверил до сих пор.

пример:

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