php Laravel Mail无法纠正抄送邮件

8oomwypt  于 2023-05-21  发布在  PHP
关注(0)|答案(3)|浏览(120)

我正在尝试安装Laravel Mail,以便正确发送带有抄送收件人的电子邮件。

$email_addresses = ['test1@example.com','test2@example.com','test3@example.com']
     $to_email = array_shift($email_addresses);
     Mail::mailer('mandrill')
           ->to([$to_email])
           ->cc($email_addresses)
           ->send(new PortalEmail($message));

但它正在向抄送电子邮件列表中的每个地址发送电子邮件,没有抄送收件人。而是向所有抄送地址的收件人发送电子邮件副本,电子邮件地址为to电子邮件地址。

2ic8powd

2ic8powd1#

这是Mandrill的一个特点。您可以在您的帐户中全局更改此设置,也可以传入自定义标头以针对每条消息强制执行此设置。

全局账号设置

全局更改设置的文档位于https://mailchimp.com/developer/transactional/docs/outbound-email/#multiple-recipients。
从文档:
要控制收件人是否可以在邮件的To标题中看到彼此的信息,请导航到Sending Defaults页面,然后选择或取消选择Expose The List Of Recipients When Sending To Multiple Addresses。您可以在API调用中使用preserve_recipients参数或X-MC-PreserveRecipients SMTP标头来覆盖这些全局设置。

每条消息覆盖

要在每个邮件的基础上覆盖此全局设置,您可以使用自定义X-MC-PreserveRecipients标题发送电子邮件。
为此,请将headers()函数添加到PortalEmail邮件:

use Illuminate\Mail\Mailables\Headers;
 
public function headers(): Headers
{
    return new Headers(
        text: [
            'X-MC-PreserveRecipients' => 'true',
        ],
    );
}

这将打开preserve_recipients设置,以便Mandrill不会修改To/Cc头。
客户标头的文档位于https://mailchimp.com/developer/transactional/docs/smtp-integration/#x-mc-preserverecipients。
从文档:
如果您一次发送给多个收件人,并希望所有收件人都能看到彼此的信息,请将此选项设置为true。如果设置为false,Mailchimp将重写ToCc头,以仅显示有关单个收件人的信息。
有关Laravel邮件头的文档位于https://laravel.com/docs/10.x/mail#headers。

hc8w905p

hc8w905p2#

使用https://github.com/PHPMailer/PHPMailer这是非常简单和有用的代替Laravel邮件

wlwcrazw

wlwcrazw3#

您使用->to($to_email)将收件人设置为列表中的第一个电子邮件地址。然后,您可以使用->cc($email_addresses)将剩余的电子邮件地址传递给cc方法。

$email_addresses = ['test1@example.com', 'test2@example.com', 'test3@example.com'];

$to_email = array_shift($email_addresses);

Mail::mailer('mandrill')
    ->to($to_email)
    ->cc($email_addresses)
    ->send(new PortalEmail($message));

相关问题