2012-05-16 23 views
7

SwiftMail sendet meine E-Mail nicht, während mail() funktioniert. Wie here.SwiftMailer sendet keine Mail, warum?

Ich habe den EchoLogger hinzugefügt, aber es wird nichts gedruckt.

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

Die E-Mail wird in $failures zurückgegeben, aber warum?

aktualisieren

In Swift_Transport_SimpleMailInvoker::mail ich die Parameter abgeladen und bekam dies:

$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 gleiche ist, wie ich in mail() verwendet. Noch keine Ahnung, was das Problem ist.

Update # 2

Dies funktionierte gut für mich:

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

Haftungsausschluss: Dies ist keine Lösung, sondern die Abhilfe, die ich verwendet, weil ich nicht die Zeit hatte, Debugger den Rahmen und finden eine echte Lösung. Nutzen Sie die oben genannten Informationen, um sich selbst zu debuggen und Ihre Lösung hier zu veröffentlichen. Ich werde es gerne annehmen und verbessern.

+0

Könnten Sie eine Lösung für diese bekommen? – KutePHP

+0

Meine Lösung war, zu ersetzen es mit einer einfachen 'mail ($ email,‚Anmeldung‘, $ nl_text,„From:“. ABSENDER),' aber es löst nicht das Problem, so habe ich Stimmen nach unten und gelöscht schließlich meiner Antwort. Das Problem würde einige Debugging erfordern, aber ich hatte nicht die Zeit dafür. – PiTheNumber

+0

Schön, du solltest das als Antwort posten. – PiTheNumber

Antwort

5

hatte ich das gleiche Problem.

Gemäß der Dokumentation swiftmailer.org standardmäßig Swift_MailTransport :: newInstance() verwendet -f%s Parameter und das ist, warum Sie "[email protected]" bekam, diesen Platz Leerzeichen zwischen -f %s zu lösen.

Ihr Code kann nun wie folgt aussehen: $message = Swift_Message::newInstance('-f %s');

Ich löste dieses Problem einfach null(), um __construct vorbei. Also meine Arbeits Code sieht wie folgt aus:

$message = Swift_Message::newInstance(null);

Ich hoffe, es wird jemandem helfen.

P.S. Ich benutze Postfix um Emails zu versenden.

7

Ich schlage vor, Sie verwenden den Debugger und Schritt durch den Code hinter send(). Wenn Sie keinen Debugger verwenden können, sollten Sie sich die Funktion mail in lib/classes/Swift/Transport/SimpleMailInvoker.php ansehen. Es gibt einen Aufruf der internen Mail-Funktion mit einem Shutdown-Operator ('@'). Vielleicht kann das Entfernen dieses Operators Ihnen eine Fehlermeldung anzeigen. Sie können auch var_dump() verwenden, um die dort übergebenen Parameter auszugeben.

2

Sieht so aus, als ob Sie den Standardtransportmechanismus verwenden, der standardmäßig according to their docsmail() verwendet.

Schwerwiegende Nachteile, wenn dieser Transport verwenden, sind:

  • Unpredictable Nachrichten-Header
  • Mangels an Feedback zu Lieferausfällen
  • Mangel an Unterstützung für mehrere Plugins, das Echtzeit-Lieferung Feedback erfordern

source

Wenn ich dies debuggen würde, würde ich SwiftMailers Implementierung der mail() Funktion finden und die übergebenen Argumente ablegen und sie mit Ihrer eigenen Arbeitsversion von mail() vergleichen. Ich habe keine Erfahrung mit SwiftMailer, aber das scheint eine schnelle Option zu sein.

+0

Ich habe das getan (siehe Update). Trotzdem glaube ich, dass ich direkt mit der Post arbeite. Danke für die Bemühung! – PiTheNumber

+1

Sie haben die Möglichkeit eliminiert, dass der Täter in $ to, $ subject oder $ body ist. Verwenden Sie die exakt gleichen Header, die SwiftMailer erstellt hat (Sie sollten die E-Mail NICHT erhalten). Dann entfernen Sie nacheinander jede Kopfzeile und führen einen erneuten Test durch, bis Sie die Kopfzeile oder Kopfzeilen gefunden haben, die das Fehlschlagen verursachen. Wiederholen Sie dies bei Bedarf mit $ extraParams. Von dort wissen Sie, was das spezifische Problem ist, und können nach einer besseren Lösung als 'mail()' suchen :) –

6

Ich konnte es beheben. Ich habe [email protected] in der Kopfzeile verwendet und dieses E-Mail-Konto wurde nicht erstellt. Ich habe [email protected] erstellt und meine E-Mails haben angefangen zu arbeiten. Ich hoffe, das hilft jemandem.

+1

Interessanterweise funktionierte das für mich. Eine in vorhandenen E-Mail-Adresse in dem Feld nicht – kakoma

+1

Ja geliefert - (Swift Benutzer hier lange Zeit) es ohne gültige ohne Fehler nicht sehr ärgerlich „Antwort auf“ – anoldermark

1

Das Problem ist in Swift_Transport_MailTransport, private $_extraParams = '-f%s'. Die Flagge '-f' (siehe Ihren Code: string(15) "[email protected]") schlägt in einigen Situationen fehl. Code Igniter hat den gleichen "Bug".

+0

Dank, können Sie mote Informationen hinzufügen? Wann versagt es? Link zu Code Igniter Bug, ... Im Moment erklärt das nicht, was das Problem ist und wie es behoben werden kann. – PiTheNumber

-2

Das ist wirklich alt sein kann, hat das gleiche Problem, das ich es gelöst, wenn ein kürzervon E-Mail. scheint die maximale Länge nach dem @ -Zeichen ist 10. das ist, was ich bisher getestet habe.

Beispiel:

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

fand ich auf symfony, wenn ich nur die Funktion mit „exit()“ verlassen zB Swiftmailer wird die E-Mail nicht senden, aber wenn ich mit

Rückkehr neuen Response() beendet; es sendet gut. also bin ich mir nicht sicher.