Использование Gmail в качестве SMTP-сервера в веб-приложении Java медленное - PullRequest
7 голосов
/ 13 апреля 2010

Мне было интересно, сможет ли кто-нибудь объяснить мне, почему это занимает почти 30 секунд каждый раз, когда мое веб-приложение Java отправляет электронное письмо с использованием SMTP-сервера Gmail? Смотрите следующие временные метки:

13/04 / 2010-22: 24: 27: 281 ОТЛАДКА test.service.impl.SynchronousEmailService - Перед отправкой почты. 13/04 / 2010-22: 24: 52: 625 DEBUG test.service.impl.SynchronousEmailService - после отправки почты.

Я использую класс JavaMailSender Spring со следующими настройками:

email.host = smtp.gmail.com

email.username=myaccount@gmail.com email.password = мойпароль email.port = 465 mail.smtp.auth.required = истина

Обратите внимание, что почта отправляется, и я получаю ее нормально, есть только эта задержка, которая приводит к медленной работе пользователя приложения.

Если вы знаете, как я могу самостоятельно диагностировать проблему, это было бы неплохо:)

Ответы [ 3 ]

4 голосов
/ 22 декабря 2010

Возможно, что gmail использует эту задержку, чтобы спаммеры не могли использовать свой SMTP-сервер "извне": если SMTP вызывается из реального клиента веб-почты, он не будет использовать эту задержку. Чтобы проверить это, вы можете открыть сеанс telnet с портом 25 и выполнить SMTP-сеанс вручную. (Примеры поиска в Интернете для SMTP HELO)

2 голосов
/ 26 декабря 2010

GMail использует SSL для подключения. Для правильной проверки SSL-сертификата требуется определенное время. Точное время зависит от сложности цепочки сертификатов, а также от использования и доступности CRL и проверки OCSP. Весьма вероятно, что Java проверяет OCSP на наличие сертификатов, и это может быть медленным.

Попробуйте запустить приложение в другой системе (желательно в другой подсети), чтобы исключить влияние брандмауэров. Возможно, некоторая часть связи (либо сам SMTP, либо поиск CRL, либо проверка OCSP) замедляется брандмауэром.

0 голосов
/ 26 декабря 2010

В зависимости от вашей ОС, у вас должна быть надлежащая почтовая система, которая позаботится о фактической отправке почты за пределы вашей сети.

Например, Postfix может хорошо выполнять эту работу. Конфигурация Postfix будет в другом потоке, но обычно Postfix будет принимать почту из вашей локальной сети (принимая, что она relay для вашей локальной сети) и будет передавать почту в gmail.

Это пример о том, как настроить postfix, чтобы иметь Gmail в качестве ретранслятора.

Наличие почтового сервиса, обеспечивающего ретрансляцию почты Gmail, позволяет практически мгновенно освободить ваше Java-приложение (Postfix поглощает почту, сохраняет ее в своей очереди и пересылает в Gmail).

...