Laravel 5.3 Mailer 类根据这篇文章配置为单例https://laravel-news.com/allowing-users-to-send-email-with-their-own-smtp-settings-in-laravel
让我们假设请求中的用户将 Mail::setSwiftMailer 设置为不同的服务器,以便通过他的邮件服务器/帐户发送邮件。
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');
$transport->setUsername('your_gmail_username');
$transport->setPassword('your_gmail_password');
$gmail = new Swift_Mailer($transport);
// Set the mailer as gmail
Mail::setSwiftMailer($gmail);
这会影响其他用户吗?据我了解,通常的单例特征不适用于 PHP http://blog.gordon-oheim.biz/2011-01-17-Why-Singletons-have-no-use-in-PHP/
在一个 Request 中创建的 Singleton 正是为了那个请求而存在的。在另一个同时完成的请求中创建的单例仍然是一个完全不同的实例。并且会占用自己的内存。这些实例彼此之间没有链接。它们是完全隔离的,因为 PHP 是一种无共享架构。您没有一个唯一的实例,而是并行进程中有许多类似的实例。
那么更改单例函数的邮件服务器是否会更改其他用户的邮件服务器?
更改 Laravel 配置会影响其他用户吗?我假设至少在这里答案是肯定的。
Config::set('mail', ['driver' => $mail->driver, 'host' => $mail->host, 'port' => $mail->port, ...]);
青春有我
炎炎设计