Php 为什么我会得到一个错误的声明“我的;mail()要求参数1为字符串“;?
所以基本上,我正在尝试创建一个批量电子邮件应用程序 我允许上传一个CSV文件和一些电子邮件,一旦我点击发送它们都将被处理和发送 我将CSV文件解析为一个数组,并使用Php 为什么我会得到一个错误的声明“我的;mail()要求参数1为字符串“;?,php,email,csv,Php,Email,Csv,所以基本上,我正在尝试创建一个批量电子邮件应用程序 我允许上传一个CSV文件和一些电子邮件,一旦我点击发送它们都将被处理和发送 我将CSV文件解析为一个数组,并使用foreach循环来处理每个电子邮件地址并发送它 例如,在填充csv数组后调用: foreach($csv as $email_address) { $sendHeaders = "headers here"; $sendSubject = "subject here"; $sendText = "long emai
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行,这是调用mymail()
函数的那一行
有人知道为什么会这样吗
编辑: 下面是我的数组的var_转储(如果有人在后面):
Array
(
[0] => Array
(
[0] => email1@foo.com
[1] => email2@foo.com
[2] => email3@foo.com
)
)
将循环更改为:
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
是一个两级数组,因此它的元素是而不是字符串,您必须迭代它的元素才能获得实际的电子邮件地址
此外,如果$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);
}
您的csv数组($csv)是什么样子的?csv数组是什么样子的?我认为您可能需要添加csv数据,然后才能得到有意义的答案。还有,
echo$email\u address的输出是什么
,紧接着在mail
之前调用?错误消息完全是自我解释的,这意味着您的$email\u地址
不是字符串
。是的,这是一个多维数组,希望您不在共享主机上:-)啊哈!太好了,现在我明白了。最后效果很好。是的,这两个变量每次都是相同的,因此我将把它们放在循环之外。谢谢@fizzix不客气:)如果我的回答能帮助你自由投票和/或接受它!虽然我要再等5分钟才能接受哈哈,但我已经投票了。在这种情况下,是的,但是谁知道$csv
是否会有更多的元素?我更喜欢一个更通用的解决方案,但我会综合您的建议:)我更喜欢开销最小的解决方案。:-)