麻烦从Php / MySQL查询传递数组到SwiftMailer

时间:2014-01-08 20:24:42

标签: php mysql arrays swiftmailer

挂起让Swift“setTo”接受来自MySQL查询的数组。以下代码仅发送给结果集/列表中的最后一个人。已经阅读了堆栈上的至少十几个相关线程和来自Swift的文档,但它们似乎只展示了如何硬编码值或做出很多假设。希望有一个更完整的例子,它也可以帮助那些不是100%使用Php数组并传递给Swift的人。

[...php connection code...]
// query email addresses
$sql = 'select emailaddress from customerlist;';
$result = mysql_query($sql );
if($result === FALSE) { 
    die(mysql_error()); // ToDo: better error handling 
} 

// create array from results
$cDistribArray = array();
while($rowEmail = mysql_fetch_assoc($result)) {
    $cDistribArray = $rowEmail['emailaddress'];
}

[edit: issue was code above, CORRECTED below, thanks Sven]
// create array from results
$cDistribArray = array();
while($rowEmail = mysql_fetch_assoc($result)) {
    $cDistribArray[] = $rowEmail['emailaddress'];
}


[...skip to Swift message create code...]

$message = Swift_Message::newInstance('Subject')
    ->setFrom(array('sender@yourserver.com' => 'Sender Name'))
    ->setTo($cDistribArray)
    ->setBody($cEmailBody,'text/html');

我确信这是显而易见的,我对数组做错了但是在阅读了很多关于如何创建数组和Swift的文章以及一个充满了测试消息的收件箱,当我硬编码时只有多个地址。 。卡住!非常感谢所提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

这会使用当前获取的邮件地址覆盖每个以前的结果:

$cDistribArray = $rowEmail['emailaddress'];

你可能想要这样的东西:

$cDistribArray[] = $rowEmail['emailaddress']; // Add new mail address to the array

答案 1 :(得分:0)

发送电子邮件的代码不在while循环中。它只会发送一封电子邮件到最后一条记录。你试过这个吗?

// create array from results
$cDistribArray = array();
while($rowEmail = mysql_fetch_assoc($result)) {
    $cDistribArray = $rowEmail['emailaddress'];

    [...skip to Swift message create code...]

    $message = Swift_Message::newInstance('Subject')
        ->setFrom(array('sender@yourserver.com' => 'Sender Name'))
        ->setTo($cDistribArray)
        ->setBody($cEmailBody,'text/html');

}