SMTP:从Laravel 5.7(Swift Mailer)发送电子邮件时更改Message-ID域

时间:2019-04-28 01:14:13

标签: laravel laravel-5 smtp swiftmailer email-headers

Laravel 5.7使用Swift Mailer发送电子邮件。

默认情况下,所有已发送的电子邮件都将带有域Message-ID(例如swift.generated)的Message-ID: <90b9835f38bb441bea134d3ac815dd6f@swift.generated>标头。

我想将域swift.generated更改为例如my-domain.com

如何更改所有电子邮件?

2 个答案:

答案 0 :(得分:0)

  1. 编辑文件config / mail.php并在结尾处定义您的域:
    'domain' => 'yourdomain.com',
  1. 在命令行中,创建一个新的侦听器:
    php artisan make:listener -e 'Illuminate\Mail\Events\MessageSending' MessageSendingListener
  1. 编辑新创建的侦听器,使其外观如下(不要实现ShouldQueue):
    <?php
    /**
     * Set the domain part in the message-id generated by Swift Mailer
     */

    namespace App\Listeners;

    use Illuminate\Mail\Events\MessageSending;
    use Swift_Mime_IdGenerator;

    class MessageSendingListener
    {
        /**
         * Create the event listener.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }

        /**
         * Handle the event.
         *
         * @param  MessageSending  $event
         * @return void
         */
        public function handle(MessageSending $event)
        {
            $event->message->setId((new Swift_Mime_IdGenerator(config('mail.domain')))->generateId());
        }
    }
  1. 在app / Providers / EventServiceProvider中注册侦听器:
        protected $listen = [

           // [...]

            \Illuminate\Mail\Events\MessageSending::class => [
                 \App\Listeners\MessageSendingListener::class,
            ],
         ];

就这样,尽情享受吧! :)

答案 1 :(得分:0)

只是找到了一种更改消息ID中的@swift.generated的正确方法。

将此代码添加到您的AppServiceProvider->boot()方法中:

\Swift_DependencyContainer::getInstance()
        ->register('mime.idgenerator.idright')
        ->asValue(config('mail.domain'));

config('mail.domain')是一个自定义配置项,因此您可以将其更改为所需的任何内容。

在Laravel 6中进行了测试,也许也可以在5. *版本中使用。

您还可以在此文件中找到许多有趣的配置: vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php