Laravel多个邮件配置和多个并发用户

时间:2019-06-17 11:22:01

标签: php laravel concurrency swiftmailer

我正在使用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);

1 个答案:

答案 0 :(得分:0)

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

  

在一个请求中创建的Singleton正是为该请求而存在的。一种   在同一时间在另一个请求中创建的Singleton仍会   是一个完全不同的实例。它会占据它自己的   记忆。这些实例没有相互链接。他们是   完全隔离,因为PHP是无共享架构。您   没有一个唯一的实例,但是在   并行过程。

因此设置Mail :: setSwiftMailer($ gmail);应该没事。无论如何-我找到了使用新Mailer的解决方案

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

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

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