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