Более быстрый способ отправки SMTP писем в Perl? - PullRequest
3 голосов
/ 23 апреля 2020

Мы используем SMTP для отправки наших электронных писем с моего сайта. Создан с использованием Email :: MIME , а затем Email :: Sender :: Transport :: SMTP для передачи его на наш SMTP-сервер для отправки:

my $transport = Email::Sender::Transport::SMTP->new({
    host => 'smtp.gmail.com',
    port => 465,
    ssl => 1,
    sasl_username => 'hello@foo.com',
    sasl_password => 'xxxx'
});

sendmail($email,{ to  => ['andy@foo.com'] });

Моя проблема в том, что она оооочень кровавая медленно! (Это занимает не менее 4-5 секунд на каждое электронное письмо, и если вы отправляете одно электронное письмо клиенту + одно электронное письмо нам (администратору), то это 10 секунд. Мы заставляем людей думать, что сайт сломан, так как кажется, что он зависает

Итак, мой вопрос - как я могу отправлять SMTP-письма без зависания сценария Perl? Меня не волнует перехват ошибок. Основная проблема заключается в том, чтобы получать письма так быстро, как возможно

Спасибо

1 Ответ

6 голосов
/ 23 апреля 2020

Очевидный подход заключается в том, чтобы на самом деле не отправлять электронную почту из веб-приложения. Вместо этого запишите информацию об электронном письме в очередь заданий и запустите другое задание (возможно, запущенное с cron), которое просматривает очередь и отправляет любые электронные письма, которые необходимо отправить. Таким образом, веб-страница немедленно возвращается, и пользователи получают свою почту в течение нескольких минут.

В последний раз, когда я пытался что-то подобное, Schwartz был одним из наиболее рекомендуемых администраторов очередей заданий. Возможно, сейчас есть что-то, что люди порекомендуют.

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