1

我正在发送一封电子邮件,以通知我的用户有关系统中的某些更改。

为了提高可传递性,我想单独发送每封电子邮件,而不是作为一封带有长 cc\bcc 列表的电子邮件。

我遇到的所有教程都谈到了插件,以及将值数组绑定到消息中的占位符的复杂方法。

我正在寻找一种相当简单的方法来做到这一点,使用对 SendGrid 服务器的单个调用,最好使用 XSMTP-API 标头,并且没有任何不必要的复杂性。

我已经在网上搜索了几个小时的解决方案,我可以自信地说那里似乎没有适合我的解决方案,所以我不得不打开一个新线程,虽然我很好意识到这是一个常见的话题,我已经阅读了多个关于类似问题的主题。不幸的是,没有一个对我有帮助。

我仅限于旧版本的 sendgrid 或 swiftMailer 库,因为我的生产服务器不支持命名空间。

在此先感谢,O。

伪代码:

$conn = $PDOStaticClass::getInstance();
$dbHelper = new DbPdoHelper($conn);

$mailList = $dbHelper->getMailinglist();

//$mailList now contains an associative array with the email addresses with of my clients, what's next?
4

1 回答 1

2

使用 SendGrid SMTPAPI 标头,这非常容易。您所要做的就是在发送消息时to在标题中添加一组地址,它会自动为列表中的每个人生成一封新电子邮件(不是密件抄送或抄送)。X-SMTPAPI例如:

"X-SMTPAPI": {
  "to": [
    "ben@example.com",
    "Joe Smith <joe@example.com>"
  ]
}

Ben 和 Joe 都会收到包含相同数据的单独电子邮件。如果您想自定义他们每个人收到的电子邮件,您可以使用替换来完成此操作。有关更多信息,请参阅文档:http: //sendgrid.com/docs/API_Reference/SMTP_API/index.html

您还可以使用SendGrid PHP 库来简化此过程:

$conn = $PDOStaticClass::getInstance();
$dbHelper = new DbPdoHelper($conn);
$sendgrid = new SendGrid('username', 'password');

$mail = new SendGrid\Mail();
$mail->setRecipientsInHeader(true);
$mailList = $dbHelper->getMailinglist();
foreach($mailList as $email) {    
  $mail->addTo($email);
}
// ...
$sendgrid->smtp->send($mail);
于 2013-04-01T23:34:01.513 回答