当且仅当在数组中提交时,Swiftmailer拒绝有效的电子邮件地址

时间:2016-07-29 17:06:37

标签: php swiftmailer

我从s2member数据库中提取用户的电话号码,并附加通过电子邮件发送短信所需的无线运营商域名(Swift Mailer)。因此,为了创建电子邮件地址数组,我使用以下内容(下面的函数#include <iostream> #include <string> struct S { template<typename T> S(T t) { std::cout << "T t\n"; } std::string value_; }; template<> S::S(std::string value) { std::cout << "string\n"; value_ = std::move(value); } template<> S::S(const std::string&) { std::cout << "const string&\n"; } int main() { S s1(42); std::string foo{"bar"}; const std::string& foor = foo; S s2(foo); S s3(foor); } 只是用正确的域替换用户的无线载体):

cellmap

对于4个匹配用户的示例,结果数组如下所示:

$matches = array();
if (is_array ($users) && count ($users) > 0) {
  foreach ($users as $user) {
    $user = new WP_User ($user->ID);
    $matches[] = "'" . get_user_field("cell_no", $user->ID) . cellmap(get_user_field("cell_carrier",$user->ID)) . "'";
  }
}

然后我内心创建一个字符串,用作Swift Mailer的“To”字段:

Array
(
[0] => '1234567891@vtext.com'
[1] => '3216549871@vtext.com'
[2] => '9876543211@vtext.com'
[3] => '6543219877@vtext.com'
)

导致这个(数字组成):

$cell_list = implode(", ", $matches);

现在我把它传递给Swift Mailer:

'1234567891@vtext.com', '3216549871@vtext.com', '9876543211@vtext.com', '6543219877@vtext.com'

我收到此错误(忽略电话号码:它们已经组成,但在实践中与正确的号码相对应):

$outgoing_message = Swift_Message::newInstance('')
  ->setFrom(array('no-reply@mydomain.com' => 'Mydomain'))
  ->setTo($cell_list)
  ->setBody($message);

// Send the message
$result = $mailer->send($outgoing_message);

我可以通过Swift Mailer成功发送个别中的任何一封电子邮件,但当它们显示为数组时,我总是会收到上述错误。我已经尝试将trim应用于各个地址和整个结果字符串。数组的PHP Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given ['123456789@vtext.com', '987654321@vtext.com', '5555551212@vtext.com', '321654987@vtext.com'] does not comply with RFC 2822, 3.6.2.' 不显示任何不可打印的字符。我尝试过各种print_r->setTo($cell_list)和其他可能有效的组合,但无济于事。我尝试在列表中用分号替换逗号,并删除每个地址周围的单引号。据我所知,电子邮件地址字符串的格式与Swift Mailer文档中所示的格式完全相同。对于我的生活,我无法弄清楚这一点。

1 个答案:

答案 0 :(得分:2)

根据Swiftmailer documentationsetTo会将一个电子邮件地址或一组电子邮件地址作为参数。

您的代码:

$cell_list = implode(", ", $matches);
$outgoing_message = Swift_Message::newInstance('')
  ->setFrom(array('no-reply@mydomain.com' => 'Mydomain'))
  ->setTo($cell_list)
  ->setBody($message);

使用implode()将所有电子邮件地址放在一个文本字符串中。

我建议不要破坏$ matches:

$outgoing_message = Swift_Message::newInstance('')
  ->setFrom(array('no-reply@mydomain.com' => 'Mydomain'))
  ->setTo($matches)
  ->setBody($message);