Laravel несколько конфигураций почты и несколько одновременных пользователей - PullRequest
0 голосов
/ 17 июня 2019

Я использую 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, это повлияет только на соответствующий экземпляр моего приложения, а не на все приложение, верно? Я хочу, чтобы один пользователь не отправлял почту с учетной записи, предназначенной для другого пользователя.

UPDATE:

Я подозреваю, что пока я не изменяю значения конфигурации, как показано ниже, 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 голосов
/ 19 июня 2019

Класс Mailer настроен как одноэлементный. Насколько я понял, это не означает, что применяются обычные синглтон-характеристики

Синглтон, созданный в одном запросе, живет именно для этого запроса. Синглтон, созданный в другом запросе, выполненном в то же время, будет по-прежнему быть совершенно другим примером. И это займет его собственный объем памяти. Эти случаи не связаны друг с другом. Они есть полностью изолирован, потому что PHP является архитектурой Shared-Nothing. Вы не имеют ни одного уникального экземпляра, но много подобных экземпляров в параллельные процессы.

Итак, настройка Mail :: setSwiftMailer ($ gmail); все должно быть в порядке. В любом случае - я нашел решение, которое использует новый Mailer

Ссылка ниже описывает проблему и показывает решение для laravel 5.8 https://laravel -news.com / позволяя пользователям к отправке-почту-с-их-собственность- Smtp-настройки-в-Laravel

Для Laravel 5.3 вам необходимо создать почтовую программу следующим образом, потому что функция Helper app () -> get ('view') не существует

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...