0

基本的に、一括メールアプリケーションを作成しようとしています。

いくつかの電子メールを含む CSV ファイルのアップロードを許可しています。[送信] をクリックすると、すべてが処理されて送信されます。

CSV ファイルを配列に解析し、foreachループを使用して各メール アドレスを処理して送信しています。

たとえば、これはcsv配列に値が設定された後に呼び出されます。

foreach($csv as $email_address)
{
   $sendHeaders = "headers here";
   $sendSubject = "subject here";
   $sendText = "long email text here";

   mail($email_address,$sendSubject,$sendText,$sendHeaders);
}

ただし、次のエラーが発生するようです。

Warning: mail() expects parameter 1 to be string

mail()私の関数が呼び出されている行である54行目にエラーがあると述べています。

なぜこれが起こっているのか誰にも分かりますか?


編集:

誰かがそれを求めている場合、これは私の配列の var_dump です。

Array
(
    [0] => Array
        (
            [0] => email1@foo.com
            [1] => email2@foo.com
            [2] => email3@foo.com
        )

)
4

1 に答える 1

2

ループを次のように変更します。

foreach($csv as $email_addresses) {
    foreach($email_addresses as $email_address) {
        $sendHeaders = "headers here";
        $sendSubject = "subject here";
        $sendText = "long email text here";

        mail($email_address,$sendSubject,$sendText,$sendHeaders);
    }
}

実際の問題は、あなた$csvが 2 レベルの配列であるため、その要素が文字列ではないことです。実際の電子メール アドレスを取得するには、その要素を反復処理する必要があります。

また、$sendHeadersand/or$sendSubjectが常に同じである場合は、ループの前に移動して、毎回設定しないようにすることもできます。

最後に、@Dagonが示唆したように、$csv常に要素が1つしかない場合は、次のように簡単に実行できます。

foreach($csv[0] as $email_address) {
    $sendHeaders = "headers here";
    $sendSubject = "subject here";
    $sendText = "long email text here";

    mail($email_address,$sendSubject,$sendText,$sendHeaders);
}
于 2013-10-23T05:53:10.893 に答える