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