2012-05-16 1 views
7

SwiftMail не отправляет мой адрес электронной почты, а mail() действительно работает. То же, что и here.SwiftMailer не отправляет почту, почему?

Я добавил 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, но почему?

Update

В Swift_Transport_SimpleMailInvoker::mail я Вытряхивали параметры и получил это:

$headers => 
    string(208) "Message-ID: <[email protected]> 
Date: Wed, 16 May 2012 14:57:44 +0200 
From: [email protected] 
MIME-Version: 1.0 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 
" 
    $extraParams => 
    string(15) "[email protected]" 

$to, $subject, $body такой же, как я в mail(). По-прежнему не знаю, в чем проблема.

Update # 2

Это работало отлично для меня:

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

Отказ от ответственности: Это не решение, но обходной путь я использовал, потому что у меня не было времени, чтобы отладчик рамки и найти реальное решение. Не стесняйтесь использовать приведенную выше информацию, чтобы отлаживать себя и размещать свое решение здесь. Я с радостью соглашусь и поддержу его.

+0

Не могли бы вы найти решение? – KutePHP

+0

Моим решением было заменить его простой «почтой» ($ email, «Anmeldung», $ nl_text, «From:» .ENDENDER); «но это не решает проблему, поэтому я получил голоса и, наконец, удалил свой ответ. Проблема потребует некоторой отладки, но у меня не было времени для этого. – PiTheNumber

+0

Ницца, вы должны опубликовать это как ответ. – PiTheNumber

ответ

5

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

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

Ваш код теперь может выглядеть так: $message = Swift_Message::newInstance('-f %s');

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

$message = Swift_Message::newInstance(null);

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

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

7

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

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

2

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

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

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

source

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

+0

Я сделал это (см. Обновление). Тем не менее, я думаю, что я использую почту напрямую. Спасибо за попытку! – PiTheNumber

+1

Вы устранили возможность того, что преступник находится в $ to, $ subject или $ body. Используйте те же самые заголовки, которые производил SwiftMailer (вы НЕ ДОЛЖНЫ получать электронную почту). Затем один за другим удаляйте каждый заголовок и повторно проверяйте, пока не найдете заголовок или заголовки, которые приводят к сбою. При необходимости повторите попытку с помощью $ extraParams. Оттуда вы узнаете, какова конкретная проблема, и у вас есть возможность искать лучшее решение, чем 'mail()' :) –

6

Я смог исправить это. Я использовал [email protected] из заголовка, и эта учетная запись электронной почты не была создана. Я создал [email protected], и мои письма начали работать. Надеюсь, это поможет кому-то.

+1

Интересно, что это сработало для меня. Существующий адрес электронной почты в поле не будет доставлен – kakoma

+1

Да - (долгое время пользователь Swift здесь) ОЧЕНЬ раздражает, что он терпит неудачу без ошибки без действительного ответа на вопрос – anoldermark

1

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

В некоторых ситуациях флаг '-f' (см. Код: string(15) "[email protected]"). Code Igniter имеет ту же самую «ошибку».

+0

Спасибо, можете ли вы добавить информацию о mote? Когда это не удается? Ссылка на ошибку кода Igniter, ... Сейчас это не объясняет, в чем проблема, и как ее исправить. – PiTheNumber

-2

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

пример:

$sname = '[email protected]'; 
->setFrom(array($sname => 'Some Header Title here')); 
0

я обнаружил на Symfony, если я просто выйти из функции с «выходом()», например, SwiftMailer не будет отправлять почту, но, если я заканчивал с

возвращения нового реагирования(); он отправляет штраф. поэтому я не уверен.