为什么我收到一条错误,指出“mail()期望参数1是字符串”?

时间:2013-10-23 05:48:47

标签: php email csv

基本上,我正在尝试创建批量电子邮件应用程序。

我允许上传包含几封电子邮件的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

它指出错误在第54行,即我的mail()函数被调用的行。

有没有人知道为什么会这样?


编辑:

如果有人在它之后,这是我的数组的var_dump:

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

)

1 个答案:

答案 0 :(得分: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是一个两级数组,因此它的元素是不是字符串,你必须迭代它的元素才能得到实际的电子邮件地址。 / p>

此外,如果$sendHeaders和/或$sendSubject始终相同,您可以在循环之前移动它们,这样您就不会每次都设置它们。

最后,正如@Dagon建议的那样,如果$csv总是只有一个元素,那么你可以这样做:

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

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