挂起让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的文章以及一个充满了测试消息的收件箱,当我硬编码时只有多个地址。 。卡住!非常感谢所提供的任何帮助。
答案 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');
}