2012-05-16 14 views
7

SwiftMail non invia la mia email, mentre mail() funziona. Lo stesso di here.SwiftMailer non invia posta, perché?

Ho aggiunto EchoLogger ma non stampa nulla.

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

L'e-mail viene restituito in $failures ma perché?

Aggiornamento

In Swift_Transport_SimpleMailInvoker::mail ho buttato fuori i parametri e ottenuto questo:

$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 è stessa che ho usato in mail(). Ancora nessuna idea di quale sia il problema.

Aggiornamento # 2

questo ha funzionato bene per me:

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

responsabilità: Questa non è una soluzione, ma la soluzione che ho usato, perché non ho avuto il tempo di debugger la struttura e trovare una soluzione reale. Sentiti libero di utilizzare le informazioni fornite qui sopra per eseguire il debug e pubblicare la tua soluzione qui. Lo accetterò volentieri e lo manterrò.

+0

Potresti avere una soluzione a questo? – KutePHP

+0

La mia soluzione era di sostituirla con un semplice 'mail ($ email, 'Anmeldung', $ nl_text," From: ". ABSENDER);' ma non risolve il problema quindi ho preso voti e alla fine ho cancellato la mia risposta. Il problema richiede un po 'di debug ma non ho avuto il tempo per farlo. – PiTheNumber

+0

Bello, dovresti postarlo come risposta. – PiTheNumber

risposta

5

Ho avuto lo stesso problema.

Secondo la documentazione swiftmailer.org di default Swift_MailTransport :: newInstance() utilizza i parametri -f%s ed è per questo che hai "[email protected]", per risolvere quel luogo spazio vuoto tra -f %s.

Ora il tuo codice può essere il seguente: $message = Swift_Message::newInstance('-f %s');

Ho risolto il problema semplicemente passando null a __construct(). Quindi il mio codice funziona così:

$message = Swift_Message::newInstance(null);

Spero che possa aiutare qualcuno.

P.S. Uso Postfix per inviare e-mail.

7

Suggerisco di utilizzare il debugger e di passare attraverso il codice dietro send().

Se non è possibile utilizzare un debugger, è necessario dare un'occhiata alla funzione mail in lib/classes/Swift/Transport/SimpleMailInvoker.php. C'è una chiamata alla funzione di posta interna con un operatore di shutup ('@'). Forse la rimozione di questo operatore può mostrarti un messaggio di errore. Inoltre è possibile utilizzare var_dump() per scaricare i parametri passati lì.

2

Sembra che tu stia utilizzando il meccanismo di trasporto predefinito che according to their docs utilizza mail() per impostazione predefinita.

gravi inconvenienti quando si usa questo trasporto sono:

  • messaggio Imprevedibile intestazioni
  • La mancanza di feedback per quanto riguarda errori di recapito
  • mancanza di supporto per diversi plugin che richiedono feedback in tempo reale di consegna

source

Se dovessi eseguire il debug di questo, troverei l'implementazione di SwiftMailer della funzione mail() e scaricare gli argomenti che sta passando e confrontarli con la tua versione di lavoro di mail(). Non ho alcuna esperienza con SwiftMailer, ma questa sembra un'opzione veloce.

+0

L'ho fatto (vedi aggiornamento). Comunque penso di andare usando la posta direttamente. Grazie per lo sforzo! – PiTheNumber

+1

Hai eliminato la possibilità che il colpevole sia in $ to, $ subject o $ body. Utilizza le intestazioni identiche a quelle prodotte da SwiftMailer (NON DEVE ricevere l'e-mail). Quindi, uno per uno rimuove ogni intestazione e ri-test fino a trovare l'intestazione o le intestazioni che causano il fallimento. Ripeti con $ extraParams se necessario. Da lì saprai qual è il problema specifico e avrai la possibilità di cercare una soluzione migliore di 'mail()' :) –

6

Sono stato in grado di risolverlo. Stavo usando [email protected] nell'intestazione e questo account email non è stato creato. Ho creato [email protected] e le mie e-mail hanno iniziato a funzionare. Spero che questo aiuti qualcuno.

+1

È interessante notare che questo ha funzionato per me. Un indirizzo email inesistente nel campo from non sarà consegnato – kakoma

+1

Sì - (utente Swift da molto tempo qui) MOLTO fastidioso fallisce senza errori senza una "risposta" valida – anoldermark

1

Il problema è in Swift_Transport_MailTransport, private $_extraParams = '-f%s'.

La bandiera '-f' (vedere il codice: string(15) "[email protected]") non funzionerà in alcune situazioni. Code Igniter ha lo stesso "bug".

+0

Grazie, puoi aggiungere informazioni? Quando fallisce? Link al bug di Code Igniter, ... In questo momento questo non spiega quale sia il problema o come risolverlo. – PiTheNumber

-2

questo può essere molto vecchio, aveva lo stesso problema ho risolto quando si utilizza un più breveda e-mail. sembra la lunghezza massima dopo il segno @ è 10. questo è quello che ho testato finora.

esempio:

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

ho scoperto su symfony se ho appena uscire dalla funzione con "exit()", per esempio, swiftmailer non invierà la posta, ma se ho finito con

ritorno nuova Response(); manda bene. quindi non sono sicuro.

Problemi correlati