用mail()的php错误需要澄清

时间:2011-08-15 11:27:53

标签: php email

我是php的新手,我需要一点澄清。香港专业教育学院搜索谷歌,但太多的结果,没有明确指出我的错误。因为我没有得到任何错误,我不知道发生了什么。

我得到的错误是这样的:

Warning: mail() expects parameter 1 to be string, array given in

如此冗长,这只是我的一小部分代码:

while( $sn_rowSelect = mysqli_fetch_array($sn_queryResult) ) { 
    mail($to,$subject,$mssg,'from:xyz');
}

if(mail($to,$subject,$mssg,'from:xyz')) {
echo "An e-mail was sent to $to with the subject: $subject";
} else {
echo "There was a problem sending the mail. Check your code and make sure that the e-mail address $to is valid";
}

我想要做的是,我有一个带有名称等的小型数据库,上面有这个循环,它假设虽然在$ sn_rowSelect中有一个名字,但是它给消息提供了它,基本上是通过电子邮件发送大量的电子邮件

错误说“期望字符串,数组给定'im假设意味着从DB获取的名称被作为一个相关的数组值获得,但是,不是它应该做什么?

提前感谢。

EDIT ***

$to = $sn_rowSelect;
$from = $_POST['sender'];
$mssg = $_POST['message'];

from和mssg,通过另一页上的表格填写。

3 个答案:

答案 0 :(得分:2)

不,你应该将实际用户名称作为字符串而不是数组。

类似于$row['name']的内容 - 执行价值的var_dump以了解数据的存储方式,或print_r

答案 1 :(得分:1)

您必须在while循环中将$设置为参数 ,并且需要将其设置为字符串。如果您希望它有意义,您还需要在while循环中移动if语句,并且您不能两次调用mail(),因为这将创建冗余电子邮件。

以下是您的固定代码:

$from = $_POST['sender'];
$mssg = $_POST['message'];

while($sn_rowSelect = mysqli_fetch_array($sn_queryResult) ) {
    $to = sn_rowSelect['email']; //change 'email' to the name of column in db
    $mailstatus = mail($to, $subject, $mssg, 'from:xyz');

    if($mailstatus) {
        echo "An e-mail was sent to $to with the subject: $subject\n";
    }else{
        echo "There was a problem sending the mail. Check your code and make sure that the e-mail address $to is valid\n";
    }
}

答案 2 :(得分:1)

您似乎正在尝试将包含多封电子邮件的array直接输入$to

可以mail函数中输入多封电子邮件,但必须用逗号分隔。

所以改变这个:

mail($to,$subject,$mssg,'from:xyz');

为:

$to = implode(",",$to);
mail($to,$subject,$mssg,'from:xyz');

另外要小心,你正在之后检查你发送的邮件是这样的:

if(mail($to,$subject,$mssg,'from:xyz')) {

这实际上会再次发送电子邮件 。如果要检查电子邮件功能是否正常,请将if语句添加到原始代码中。