2013-12-11 5 views
2

Я использую swiftmailer для отправки одного электронного письма примерно с 300 BCC. Проблема в том, что я получаю 30 секундный тайм-аут на стороне клиента при этом.Symfony2 SwiftMailer - Как отправить электронную почту, не дожидаясь ответа сервера

При проверке на стороне сервера письма были отправлены правильно, но отправка всех этих писем занимает некоторое время, потому что почтовый сервер имеет дело с большим количеством писем.

Любая идея о том, как заставить swiftmailer не ждать ответа сервера и отображать представление.

Я проверил How to Spool Emails от coockbook, но я не знаю, что мне нужно сделать это таким образом.

Любая идея, как я мог это сделать? Заранее спасибо.

+0

Имеет ли session_write_close в своем действии может изменить что-то ?? http://www.php.net/manual/en/function.session-write-close.php – pbenard

+0

Я так не думаю. Swiftmailer отправляет электронные письма и сообщения для ответа сервера на каждое электронное письмо, что требует времени. –

+1

Письма с буферизацией - это именно то, что вам нужно здесь. –

ответ

4

Из Symfony Docs:

# app/config/config.yml 
swiftmailer: 
    # ... 
    spool: { type: memory } 

При использовании SwiftmailerBundle отправить по электронной почте от Symfony2 приложения , то по умолчанию будет посылать электронную почту немедленно. Тем не менее, вы можете избежать удара производительности связи между Swift Mailer и почтовым транспортом, который может привести к тому, что пользователь будет ждать загрузки следующей страницы при отправке электронной почты . Этого можно избежать, выбрав «спулать» электронные письма вместо отправки их напрямую. Это означает, что Swift Mailer не пытается отправить электронное письмо, но вместо этого сохраняет сообщение где-то, например, файл. Другой процесс может затем прочитать из катушки и позаботиться о отправке писем в катушке. В настоящее время поддерживается только буферизация в файл или память поддерживается Swift Mailer.

http://symfony.com/doc/current/cookbook/email/spool.html

+0

Я знаю, эта тема уже довольно старая, но я столкнулся с той же проблемой, что и @ Miloš был, и я попытался справиться с этим, используя катушку памяти, как вы предложили. Так или иначе, по-прежнему требуется много времени для того, чтобы электронные письма были намотаны и для очень большого количества электронных писем сервер все еще не работает. Есть ли другой способ справиться с этим? Фоновый процесс? Или, по крайней мере, может быть сообщение ajax-message/flash-сообщение, отображающее состояние процесса отправки/буферизации? – sonja

Смежные вопросы