【问题标题】:Laravel multiple mail configurations and multiple concurrent usersLaravel 多邮件配置和多并发用户
【发布时间】:2019-06-17 11:22:01
【问题描述】:

我正在使用 Laravel 5.3,我对多个邮件程序有疑问。我的默认邮件程序是在配置中设置的。根据其他帖子中的建议,当我想从另一台服务器发送邮件时,我会使用此脚本更改默认邮件。

// Backup your default mailer
$backup = Mail::getSwiftMailer();

// Setup your gmail mailer
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');
$transport->setUsername('your_gmail_username');
$transport->setPassword('your_gmail_password');
// Any other mailer configuration stuff needed...

$gmail = new Swift_Mailer($transport);

// Set the mailer as gmail
Mail::setSwiftMailer($gmail);

// Send your message
Mail::send();

// Restore your original mailer
Mail::setSwiftMailer($backup);

所以我的问题是澄清之一。假设有多个用户同时发送邮件。如果他们都在设置 Mail::setSwiftMailer,这只会影响我的应用程序的各个实例,而不是整个应用程序,对吗?我想避免一个用户从另一个用户的帐户发送邮件。

更新:

我怀疑只要不更改如下配置值,Mail::setSwiftMailer 只会为当前用户设置 Mailer。对吗?

$mail=DB::table('mail_settings')->first();
$config = array(
            'driver' => $mail->driver,
            'host' => $mail->host,
            'port' => $mail->port,
            'from' => array('address' => $mail->from_address, 'name' => $mail->from_name),
            'encryption' => $mail->encryption,
            'username' => $mail->username,
            'password' => $mail->password,
            'sendmail' => '/usr/sbin/sendmail -bs',
            'pretend' => false
        );
Config::set('mail',$config);

【问题讨论】:

    标签: php laravel concurrency swiftmailer


    【解决方案1】:

    Mailer 类被配置为单例。据我了解,这并不意味着通常的单例特征适用http://blog.gordon-oheim.biz/2011-01-17-Why-Singletons-have-no-use-in-PHP/

    在一个 Request 中创建的 Singleton 正是为该请求而存在的。一种 在同一时间完成的另一个请求中创建的单例仍然会 是一个完全不同的例子。它会占据它自己的 记忆。这些实例没有相互关联。他们是 完全隔离,因为 PHP 是 Shared-Nothing 架构。你 没有一个唯一的实例,但有许多相似的实例 并行进程。

    所以设置 Mail::setSwiftMailer($gmail);应该没事。无论如何 - 我找到了一个使用新邮件程序的解决方案

    下面的链接描述了该问题并显示了 laravel 5.8 的解决方案 https://laravel-news.com/allowing-users-to-send-email-with-their-own-smtp-settings-in-laravel

    对于 Laravel 5.3,你需要像这样创建邮件程序,因为辅助函数 app()->get('view') 不存在

    $mailer = new Mailer(app('view'), $swift_mailer, app('events'));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2019-06-16
      • 2018-11-18
      相关资源
      最近更新 更多