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

SMTP: Change Message-ID domain in sending emails from Laravel 5.7 (Swift Mailer)

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

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

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

如何为所有电子邮件更改此设置?

  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,
            ],
         ];

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

刚刚找到更改消息 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