2016-07-29 5 views
0

私はs2memberデータベースからユーザーの電話番号を引き出し、電子メール(swiftmailer)でSMSテキストを送信するために必要な無線通信事業者ドメイン名を追加します。だから、(だけで追加するための正しいドメインとユーザーの無線キャリアを置き換えるの下に関数「cellmap」)以下、私が使用したメールアドレスの配列を作成します。Swiftmailerが配列で提出された場合にのみ有効なメールアドレスを拒否する

$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)) . "'"; 
    } 
} 

結果の配列がために、このようになります4人のマッチしたユーザーの例:(

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

この、その結果の数字を:

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

は、それから私は、ではSwiftMailerのために、「へ」のフィールドとして使用する文字列を作成するために、内破

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

は今、私はそうのようにではSwiftMailerすることを渡します:)まで行われ

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

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

そして、私はこのエラーを取得する(それらが作られている、電話番号を無視しますが、右に対応実際にもの):

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.' 

私は成功し、個別にではSwiftMailerを経由して、これらの電子メールのいずれかを送信することができますが、彼らは、配列として表示されたとき、私は常に目を取得しますe上記エラー。私は個々のアドレスと結果の文字列全体にトリムを適用しようとしました。配列のprint_rには印刷できない文字は表示されません。私は - > setTo($ cell_list)、 - > setTo(array( '$ cell_list'))と何か他のものがうまく動作しない、さまざまな組み合わせを試みました。私は、リスト内のセミコロンでカンマを置き換えようとしました。各アドレスの一重引用符を削除しました。私が言うことができる限り、電子メールアドレスの文字列はswiftmailerの文書に示されている形式とまったく同じですが、私の人生にとってはわかりません。

ありがとうございました!

EDIT:エラーメッセージには、.com部分には黒色のフォント色が残り、残りは赤色になっています。それはここに表示されているのか、ちょっと変わったものなのでしょうか?

+0

方法について - > setTo($のcell_list);? – jonju

+0

jonju - whoops、これはtypoですが、本番システムでは$ cell_listを呼び出していました。残りのテキストを編集して一致させます。 – user1596165

+0

を見てくださいhttps://github.com/swiftmailer/swiftmailer/issues/382 – jonju

答えて

2

Swiftmailer documentationによると、setToは、1つの電子メールアドレスか、電子メールアドレスの配列をパラメータとして取ります。

あなたのコード:implode()を使用して

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

は、単一のテキスト文字列内のすべての電子メールアドレスを置きます。

私は破ないことをお勧め$試合:

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

さて、私は気になるでしょう。それは動作します。私は思っていないと思う - > setTo(array($ matches))は文字列として解釈されるだろう。私もそれを試したからだ。 – user1596165

関連する問題