Почему в электронном письме отправителя нет скрытой копии, если объединить уведомление laravel и рассылку Laravel?

Я использую Laravel 5.3

Мой контроллер такой:

auth()->user()->notify(new ConfirmOrder($invoice));

Мое уведомление такое:

<?php
...
class ConfirmOrder extends Notification implements ShouldQueue, ShouldBroadcast
{
    use Queueable;
    private $data;
    public function __construct($data)
    {
        $this->data = $data;
    }
    public function via($notifiable)
    {
        return ['mail'];
    }
    public function toMail($notifiable)
    {
        $mail_myshop = explode(',', config('app.mail_myshop'));
        return (new ConfirmOrderMail($this->data, $notifiable))
            ->to($notifiable->routeNotificationFor('mail'))
            ->bcc($mail_myshop)
            ->subject('Thanks');
    }
}

Моя рассылка выглядит так:

<?php
...
class ConfirmOrderMail extends Mailable
{
    use Queueable, SerializesModels;
    public $data;
    public $user;
    public function __construct($data, $user)
    {
        $this->data = $data;
        $this->user = $user;
    }
    public function build()
    {
        return $this->view('vendor.notifications.mail.email-confirm-order',['data'=>$this->data, 'name' => $this->user->name]);
    }
}

Я совмещаю уведомление и отправку по почте, потому что laravel 5.3 не поддерживает bcc

Работает, но есть один недостаток. На отправителе электронной почты нет скрытой копии. Например, есть 3 письма скрытой копии. Он должен появиться в электронном письме отправителя (если я нажму отправленное письмо в Gmail и щелкну деталь, есть ли скрытая копия электронной почты. Но нет скрытой копии электронной почты)

Я устанавливаю свой адрес электронной почты отправителя в env следующим образом:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=****@gmail.com
MAIL_PASSWORD=****
MAIL_ENCRYPTION=tls

Как я могу отобразить скрытую копию в электронном письме отправителя (в отправленном письме)?

Обновление:

Я добавлю подробности своей проблемы

Если я отправляю почту через Gmail следующим образом:

введите здесь описание изображения

Затем я проверяю меню отправленной почты в Gmail от отправителя электронной почты, результат такой:

введите здесь описание изображения

Похоже, электронная почта скрытой копии

Если я отправлю письмо из Laravel с указанным выше кодом, результат:

Я проверяю меню отправленных писем от отправителя электронной почты, результат такой:

введите здесь описание изображения

Похоже, что нет скрытой копии электронной почты

Я хочу: я хочу отображать электронную почту bcc в электронной почте отправителя на laravel

Как я могу это сделать?


person samuel toh    schedule 20.10.2017    source источник
comment
его не зря называют слепой копией.   -  person Daniel A. White    schedule 21.10.2017
comment
@ Дэниел А. Уайт, что ты имеешь в виду? я не понимаю   -  person samuel toh    schedule 21.10.2017
comment
слепой, например, вы не можете видеть, как скрывается скрытая копия. Однако, если я правильно вас понял, вы отправляете свои электронные письма через свою учетную запись Gmail, поэтому вы являетесь отправителем и хотите видеть пользователя скрытой копии в электронном письме в отправленных элементах?   -  person fubar    schedule 21.10.2017
comment
@fubar, да, как я объясняю на свой вопрос. Но при использовании mail laravel электронная почта bcc не отображается на отправителе электронной почты. Кстати, обновляю свой вопрос. Я добавляю подробности своей проблемы   -  person samuel toh    schedule 21.10.2017
comment
@samueltoh, если вы нажмете Показать оригинал, чтобы увидеть полное сообщение, указаны ли адреса скрытой копии в заголовках писем?   -  person fubar    schedule 21.10.2017
comment
@fubar, если я отправляю почту из Laravel, адрес BCC не указан   -  person samuel toh    schedule 21.10.2017


Ответы (1)


Это невозможно.

Laravel использует SwiftMailer для почты SMTP. Когда вы отправляете электронное письмо со списком адресов в поле BCC, SwiftMailer фактически разбивает этот список и отправляет каждому адресу отдельное электронное письмо.

Таким образом, вместо отправки одного электронного письма с заголовком BCC: [email protected], [email protected], [email protected] SwiftMailer отправит три отдельных письма с заголовками BCC: [email protected], BCC: [email protected] и BCC: [email protected] соответственно.

Поскольку в электронном письме, которое вы получаете в Gmail, нет списка адресов в заголовке BCC, оно не может показать вам этот список.

Я сказал, что это невозможно, но технически, если вы хотите, вы можете разветвить репозиторий SwiftMailer, обновить код, чтобы не разделять получателей BCC на отдельные электронные письма, а затем выяснить, как получить Laravel чтобы использовать вашу настроенную версию SwiftMailer, но я очень сомневаюсь, что это того стоит.

person patricus    schedule 21.10.2017
comment
Мне любопытно, почему SwiftMailer будет делать это, когда отправляющий почтовый сервер уже способен обрабатывать электронные письма BCC. Похоже, вы копались в источнике, чтобы найти это. У вас есть ссылка на соответствующий код / ​​строку? - person fubar; 21.10.2017
comment
@patricus, Если вы ответите на это, значит это не может быть реализовано. Если я использую laravel 5.4 или 5.5, это можно сделать или то же самое? - person samuel toh; 21.10.2017
comment
@fubar Я думаю, что общая идея заключается в том, что SwiftMailer не может гарантировать, что серверы SMTP будут вырезать заголовки BCC или что клиенты не будут отображать заголовки BCC. Если ни один из них не изменит заголовки, то полный список адресов BCC будет доступен каждому получателю, что противоречит цели. Итак, чтобы соответствовать тому, как должна работать BCC, он специально отправляет отдельное электронное письмо на каждый адрес BCC. - person patricus; 21.10.2017
comment
@samueltoh Это ограничение SwiftMailer, которое используется всеми версиями Laravel. Переход на 5.4 или 5.5 не изменит эту функциональность. - person patricus; 21.10.2017
comment
@samueltoh Пока вы используете SMTP, да, все будет так же. - person patricus; 21.10.2017
comment
@patricus спасибо за объяснение. Я не знал, что это сделал SwiftMailer. - person fubar; 21.10.2017
comment
@patricus, а менять надо? например, используя mailgun - person samuel toh; 21.10.2017
comment
@fubar Я тоже. Я никогда не изучал и не обращал внимания на реализации BCC до этого вопроса. :) - person patricus; 21.10.2017
comment
@samueltoh Я не знаю, как MailGun, SparkPost или Amazon SES обрабатывают BCC. Они могут отправлять заголовки; они не могут. Вам нужно будет проверить их, чтобы увидеть. - person patricus; 21.10.2017
comment
@patricus, хорошо. Спасибо за ваше объяснение. Я сначала попробую - person samuel toh; 21.10.2017