使用不同的消息流在 symfony 上通过邮戳发送电子邮件
Sending email via postmark on symfony with different message streams
随着我的应用程序的发展,我需要以正确的方式向大量用户发送电子邮件。目前我们的交易电子邮件运行良好,这就是它们的结构。
.env 文件:
###> symfony/postmark-mailer ###
MAILER_DSN=postmark://token@default
###< symfony/postmark-mailer ###
发送邮件的控制器:
$email = (new Email())
->from('emailaddress', 'Sitename')
->to($email)
->priority(Email::PRIORITY_HIGH)
->subject('Subject line here')
->text("Your account's email has been changed to this one. If you didn't do this, contact us.");
//Send it.
$mailer->send($email);
这行得通,但是当我们想批量发送电子邮件(广播)时,这行不通。我们尝试通过这样做来更改 header:
$email = (new TemplatedEmail())
->from(new Address('emailaddress', 'Sitename'))
->subject('Subject line')
->htmlTemplate('email/post.html.twig')
->context([
'postTitle' => $post_title,
'postContent' => $post_content_updated,
'profilePicture' => $user->getProfilePicture(),
'displayName' => $user->getDisplayName(),
]);
foreach($subscribers as $subscriber)
{
$email->addBcc($subscriber->getEmail());
}
$email->getHeaders()
->addTextHeader('X-PM-Message-Stream', 'broadcast');
$mailer->send($email);
我们得到一个错误:ErrorCode: '300', Message: 'Maximum of 50 recipients allowed per email message'.
我注意到这个错误出现在默认事务流中而不是广播中。我们如何进行这项工作?我似乎找不到与此相关的文档。
群发电子邮件不使用 Bcc
。您需要为每个电子邮件地址发送单独的电子邮件。 X-PM-Message-Stream
只是 header 表示 Postmark 使用另一个流(使用另一个服务器和其他调整)。您可以通过这种方式在循环中执行此操作:
foreach($subscribers as $subscriber) {
$email = (new TemplatedEmail())
->from(new Address('emailaddress', 'Sitename'))
->to($subscriber->getEmail())
->subject('Subject line')
->htmlTemplate('email/post.html.twig')
->context([
'postTitle' => $post_title,
'postContent' => $post_content_updated,
'profilePicture' => $user->getProfilePicture(),
'displayName' => $user->getDisplayName(),
]);
$email
->getHeaders()
->addTextHeader('X-PM-Message-Stream', 'broadcast');
$mailer->send($email);
}
如果您需要尽快广播,您应该使用 API from Postmark。然后,您可以向 API 每个请求发送 500 条消息。您可以同时发送 10 个请求,因此每次处理一个请求的速度约为 5000 条消息(我认为大约需要 1 秒)
随着我的应用程序的发展,我需要以正确的方式向大量用户发送电子邮件。目前我们的交易电子邮件运行良好,这就是它们的结构。
.env 文件:
###> symfony/postmark-mailer ###
MAILER_DSN=postmark://token@default
###< symfony/postmark-mailer ###
发送邮件的控制器:
$email = (new Email())
->from('emailaddress', 'Sitename')
->to($email)
->priority(Email::PRIORITY_HIGH)
->subject('Subject line here')
->text("Your account's email has been changed to this one. If you didn't do this, contact us.");
//Send it.
$mailer->send($email);
这行得通,但是当我们想批量发送电子邮件(广播)时,这行不通。我们尝试通过这样做来更改 header:
$email = (new TemplatedEmail())
->from(new Address('emailaddress', 'Sitename'))
->subject('Subject line')
->htmlTemplate('email/post.html.twig')
->context([
'postTitle' => $post_title,
'postContent' => $post_content_updated,
'profilePicture' => $user->getProfilePicture(),
'displayName' => $user->getDisplayName(),
]);
foreach($subscribers as $subscriber)
{
$email->addBcc($subscriber->getEmail());
}
$email->getHeaders()
->addTextHeader('X-PM-Message-Stream', 'broadcast');
$mailer->send($email);
我们得到一个错误:ErrorCode: '300', Message: 'Maximum of 50 recipients allowed per email message'.
我注意到这个错误出现在默认事务流中而不是广播中。我们如何进行这项工作?我似乎找不到与此相关的文档。
群发电子邮件不使用 Bcc
。您需要为每个电子邮件地址发送单独的电子邮件。 X-PM-Message-Stream
只是 header 表示 Postmark 使用另一个流(使用另一个服务器和其他调整)。您可以通过这种方式在循环中执行此操作:
foreach($subscribers as $subscriber) {
$email = (new TemplatedEmail())
->from(new Address('emailaddress', 'Sitename'))
->to($subscriber->getEmail())
->subject('Subject line')
->htmlTemplate('email/post.html.twig')
->context([
'postTitle' => $post_title,
'postContent' => $post_content_updated,
'profilePicture' => $user->getProfilePicture(),
'displayName' => $user->getDisplayName(),
]);
$email
->getHeaders()
->addTextHeader('X-PM-Message-Stream', 'broadcast');
$mailer->send($email);
}
如果您需要尽快广播,您应该使用 API from Postmark。然后,您可以向 API 每个请求发送 500 条消息。您可以同时发送 10 个请求,因此每次处理一个请求的速度约为 5000 条消息(我认为大约需要 1 秒)