使用PHP中的SendGrid向邮件列表中的每个收件人发送单独的电子邮件

时间:2013-04-01 23:14:13

标签: php email-integration sendgrid

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

为了提高可传性,我想单独发送每封电子邮件,而不是发送一封带有长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?

1 个答案:

答案 0 :(得分:2)

使用SendGrid SMTPAPI标头非常简单。您所要做的就是在发送邮件时在to标题中添加X-SMTPAPI地址数组,它会自动为列表中的每个人生成新的电子邮件(不是BCC或CC) )。例如:

"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 library来简化此过程:

$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);