2016-07-29 13 views
0

Ich ziehe Benutzer Telefonnummern aus einer s2member-Datenbank und Anhängen der Mobilfunkanbieter Domain Name erforderlich, um SMS-Texte per E-Mail senden (swiftmailer). So erstellen Sie das Array von E-Mail-Adressen, die ich die folgenden (die Funktion ‚cellmap‘ unten nur die Mobilfunkanbieter mit der richtigen Domäne anhängen Benutzer ersetzt) ​​verwenden:Swiftmailer ablehnt gültige E-Mail-Adressen, wenn und nur wenn in Array

$matches = array(); 
if (is_array ($users) && count ($users) > 0) { 
    foreach ($users as $user) { 
    $user = new WP_User ($user->ID); 
    $matches[] = "'" . get_user_field("cell_no", $user->ID) . cellmap(get_user_field("cell_carrier",$user->ID)) . "'"; 
    } 
} 

Das resultierende Array wie folgt aussieht, für eine Beispiel 4 ausgewählte Benutzer:

Array 
(
[0] => '[email protected]' 
[1] => '[email protected]' 
[2] => '[email protected]' 
[3] => '[email protected]' 
) 

Dann implodieren ich einen String zu erstellen, die als „an“ -Feld für Swiftmailer zu verwenden:

$cell_list = implode(", ", $matches); 

die dazu führt (Zahlen aus sind):

'[email protected]', '[email protected]', '[email protected]', '[email protected]' 

Jetzt gehe ich, dass wie so zu Swiftmailer:

$outgoing_message = Swift_Message::newInstance('') 
    ->setFrom(array('[email protected]' => 'Mydomain')) 
    ->setTo($cell_list) 
    ->setBody($message); 

// Send the message 
$result = $mailer->send($outgoing_message); 

Und ich bekomme diese Fehlermeldung (ignorieren Sie die Telefonnummern, sie gemacht, aber entsprechen nach rechts diejenigen in der Praxis):

PHP Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given ['[email protected]', '[email protected]', '[email protected]', '[email protected]'] does not comply with RFC 2822, 3.6.2.' 

ich erfolgreich individuell über Swiftmailer eine dieser E-Mails versenden kann, aber wenn sie als Array erscheinen ich immer bekommen th e über Fehler. Ich habe versucht, Trim auf die einzelnen Adressen und die gesamte resultierende Zeichenfolge anzuwenden. Ein print_r des Arrays zeigt keine nicht druckbaren Zeichen. Ich habe verschiedene Kombinationen von -> setTo ($ cell_list), -> setTo (Array ('$ cell_list')) und alles andere, was funktionieren könnte, vergeblich versucht. Ich habe versucht, Komma durch Semikolon in der Liste zu ersetzen und die einfachen Anführungszeichen um jede Adresse zu entfernen. Soweit ich das beurteilen kann, ist die Kette der E-Mail-Adressen im exakten Format wie in der Dokumentation von swiftmailer gezeigt, aber für das Leben von mir kann ich das nicht herausfinden.

Danke für jede Hilfe!

EDIT: Ich bemerke hier, dass in der Fehlermeldung der .com Teil schwarze Schriftfarbe hat, während der Rest rot hat. Ist das ein Hinweis oder etwas Seltsames mit dem Display hier?

+0

wie etwa -> setTo ($ cell_list) ;? – jonju

+0

jonju - Whoops, das war hier ein Tippfehler, aber im Produktionssystem rief es $ cell_list auf. Bearbeitete den Rest des Textes passend. – user1596165

+0

werfen Sie einen Blick auf https://github.com/swiftmailer/swiftmailer/issues/382 – jonju

Antwort

2

Gemäß Swiftmailer documentation, setTo wird entweder eine einzelne E-Mail-Adresse oder ein Array von E-Mail-Adressen als Parameter verwendet.

Ihr Code:

$cell_list = implode(", ", $matches); 
$outgoing_message = Swift_Message::newInstance('') 
    ->setFrom(array('[email protected]' => 'Mydomain')) 
    ->setTo($cell_list) 
    ->setBody($message); 

implode() Mit legt alle E-Mail-Adressen in einem einzigen Text-String.

Ich schlage vor, nicht $ treffer implodiert:

$outgoing_message = Swift_Message::newInstance('') 
    ->setFrom(array('[email protected]' => 'Mydomain')) 
    ->setTo($matches) 
    ->setBody($message); 
+0

Nun, ich werde verdammt sein. Das funktioniert. Ich denke, ich dachte nicht -> setTo (Array ($ Matches)) würde als String interpretiert, weil ich das auch versucht habe, aber danke für die Lösung! – user1596165