【问题标题】:Sending email via postmark on symfony with different message streams在 symfony 上使用不同的消息流通过邮戳发送电子邮件
【发布时间】:2021-09-14 00:05:06
【问题描述】:

随着我的应用程序不断发展,我需要向大量用户发送电子邮件的正确方式。目前我们的交易电子邮件运作良好,这就是它们的结构。

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

这可行,但是当我们要批量发送电子邮件(广播)时,这不起作用。我们尝试通过这样做来更改标题:

$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'.

我注意到此错误显示在默认事务流而不是广播中。我们如何进行这项工作?我似乎找不到与此相关的文档。

【问题讨论】:

    标签: symfony email postmark


    【解决方案1】:

    批量电子邮件不使用Bcc。您需要为每个电子邮件地址发送单独的电子邮件。 X-PM-Message-Stream 只是标题说 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 秒)

    【讨论】:

    • 我收到一个错误返回:Symfony\Component\Mailer\Mailer::send(): Argument #1 ($message) must be of type Symfony\Component\Mime\RawMessage, Symfony\Component\Mime\Header\Headers given
    猜你喜欢
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2021-10-25
    • 2020-10-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多