【问题标题】:SMTP: Change Message-ID domain in sending emails from Laravel 5.7 (Swift Mailer)SMTP:从 Laravel 5.7 (Swift Mailer) 发送电子邮件时更改 Message-ID 域
【发布时间】:2019-09-17 01:36:51
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:
    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,
                ],
             ];
    

    就是这样,享受吧! :)

    【讨论】:

    • 太棒了!完美运行,谢谢!这应该已经像这样包含在 Laravel 中了。也许在 Laravel 6.0 中。 :)
    • 肯定包含在laravel 7.0中,只需要第一步,其余的已经完成
    【解决方案2】:

    刚刚找到了在消息 ID 中更改 @swift.generated 的正确方法。

    将此代码添加到您的 AppServiceProvider-&gt;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

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2011-01-30
      • 2019-06-16
      • 2019-03-05
      • 2023-03-28
      相关资源
      最近更新 更多