2012-05-16 16 views
7

SwiftMail nie wysyła mojego e-maila, a działa mail(). To samo, co here.SwiftMailer nie wysyła wiadomości, dlaczego?

Dodałem EchoLogger, ale nic nie drukuje.

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

E-mail jest zwracany w $failures ale dlaczego?

Aktualizacja

W Swift_Transport_SimpleMailInvoker::mail Rzuciłam się parametry i dostał to:

$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 jest taka sama jak kiedyś w mail(). Wciąż nie mam pojęcia, na czym polega problem.

Aktualizacja # 2

To działało w porządku dla mnie:

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

Oświadczenie: To nie jest rozwiązanie, ale obejście używałem, bo nie mają czasu, aby debugger ramy i znaleźć prawdziwe rozwiązanie. Zachęcamy do skorzystania z informacji podanych powyżej w celu przeprowadzenia debugowania i opublikowania swojego rozwiązania tutaj. Z radością przyjmuję i przegłosuję to.

+0

Czy możesz uzyskać rozwiązanie tego problemu? – KutePHP

+0

Moim rozwiązaniem było zastąpienie go prostym 'mail ($ email, 'Anmeldung', $ nl_text," From: ".BREENDER);' ale to nie rozwiązuje problemu, więc dostałem głosowanie i ostatecznie usunąłem odpowiedź. Problem wymagałby trochę debugowania, ale nie miałem na to czasu. – PiTheNumber

+0

Dobrze, powinieneś opublikować to jako odpowiedź. – PiTheNumber

Odpowiedz

5

miałem ten sam problem.

Zgodnie z dokumentacją swiftmailer.org domyślnie Swift_MailTransport :: newInstance() używa parametrów -f%s i dlatego masz "[email protected]", aby rozwiązać to miejsce puste miejsce między -f %s.

Twój kod może teraz wyglądać tak: $message = Swift_Message::newInstance('-f %s');

Rozwiązałem ten problem, po prostu przekazując null do __construct(). Tak więc mój działający kod wygląda następująco:

$message = Swift_Message::newInstance(null);

Mam nadzieję, że komuś to pomoże.

P.S. Używam Postfix do wysyłania e-maili.

7

Proponuję użyć debuggera i przejść przez kod za send().

Jeśli nie możesz użyć debuggera, powinieneś rzucić okiem na funkcję mail w lib/classes/Swift/Transport/SimpleMailInvoker.php. Istnieje wywołanie funkcji poczty wewnętrznej z operatorem zamykania ("@"). Może usunięcie tego operatora może pokazać komunikat o błędzie. Możesz także użyć var_dump(), aby zrzucić parametry tam przekazane.

2

Wygląda na to, że używasz domyślnego mechanizmu transportu, który domyślnie używa according to their docsmail().

poważne wady przy stosowaniu tego transportu są:

  • Nieprzewidywalny wiadomość nagłówki
  • brak informacji zwrotnych dotyczących niepowodzeń dostawczych
  • brak wsparcia dla kilku wtyczek, które wymagają w czasie rzeczywistym informacje zwrotne dostawy

source

Gdybym to debugował, znajdowałbym implementację SwiftMailer funkcji mail() i zrzuć argumenty, które przechodzą i porównaj je z własną działającą wersją mail(). Nie mam żadnego doświadczenia ze SwiftMailer, ale wydaje mi się to szybką opcją.

+0

Zrobiłem to (patrz aktualizacja). Nadal myślę, że używam poczty bezpośrednio. Dzięki za wysiłek! – PiTheNumber

+1

Wyeliminowałeś możliwość, że sprawca jest w $ do, $ subject lub $ body. Użyj dokładnie tych samych nagłówków, które wygenerował SwiftMailer (NIE POWINIEN otrzymywać tego e-maila). Następnie, jeden po drugim usuń każdy nagłówek i przeprowadź test, aż znajdziesz nagłówek lub nagłówki, które powodują awarię. Powtórz z $ extraParams jeśli to konieczne. Stamtąd będziesz wiedział, jaki jest konkretny problem i masz możliwość znalezienia lepszego rozwiązania niż 'mail()' :) –

6

Udało mi się to naprawić. Używałem [email protected] w nagłówku, a to konto e-mail nie zostało utworzone. Stworzyłem [email protected] i moje e-maile zaczęły działać. Mam nadzieję, że to pomoże komuś.

+1

Co ciekawe, zadziałało to dla mnie. Nieistniejący adres e-mail w polu "od" nie zostanie dostarczony. – kakoma

+1

Tak - (długi czas użytkownik Swift tutaj) BARDZO denerwujący, nie powiedzie się bez błędu bez prawidłowej "odpowiedzi" na – anoldermark

1

Problem dotyczy Swift_Transport_MailTransport, private $_extraParams = '-f%s'.

Flaga '-f' (patrz kod: string(15) "[email protected]") zawiedzie w niektórych sytuacjach. Code Igniter ma taki sam "błąd".

+0

Dzięki, czy możesz dodać informacje o mote? Kiedy to się nie udaje? Link do kodu Błąd zapalnika, ... W tej chwili nie wyjaśnia to, czym jest problem, ani jak go naprawić. – PiTheNumber

-2

To może być bardzo stary, miał ten sam problem i rozwiązać go podczas korzystania z krótszyz email. Wydaje się, że maksymalna długość po znaku @ wynosi 10. to jest to, co do tej pory przetestowałem.

przykład:

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

znalazłem na symfony, czy po prostu wyjść z funkcji z „exit()” na przykład swiftmailer nie wysyła pocztę ale gdybym zakończył

powrotnej nowego Response(); wysyła dobrze. więc nie jestem pewien.

Powiązane problemy