我从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文档中所示的格式完全相同。对于我的生活,我无法弄清楚这一点。
答案 0 :(得分:2)
根据Swiftmailer documentation,setTo
会将一个电子邮件地址或一组电子邮件地址作为参数。
您的代码:
$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);