Страница 1 из 2

OpenServer SMTP - очень долгая отправка сообщения

Добавлено: 20 дек 2013, 19:40
fooger
Здравствуйте. Таки поставил и настроил почтовый сервер hMailServer, все работает отлично, но есть нюансы:
OponServer почему-то очень долго отправляет почту через SMTP, хотя если это делать скриптом, отправка происходит мгновенно.
Подробная инфа:
1) Для проверки использовалось два SMTP, один localhost (hMailServer), другой на моем хостинге.
2) Если отправлять сообщение через SMTP из PHP скрипта (т.е. соединятся напрямую, не используя при этом OpenServer), отправка происходит мгновенно (практически никаких задержек).
Если отправлять почту с помощью mail() и использовать отправку OpenServer SMTP, почта стабильно (регулярно) отправляется долго, а именно 3-4 секунды. Компьютер мощный, пробовал отправлять как через localhost, так и через почтовый сервер хостинга.
3) Все фиксы поставлены, IPv6 отключен. Пробовал на всех версиях PHP + Apache. Антивирусы не блокируют, для того чтобы убедится, даже временно удалил его.
Нужно выяснить где и почему происходит такая задержка, при отправке писем через OpenServer SMTP.
Куда копать, что посоветуете делать? Какую еще информацию необходимо предоставить?

Добавлено: 21 дек 2013, 02:27
Максим
Огромное Вам СПАСИБО! :-) За то что нашли эту проблему, приятно когда Open Server становится лучше. Вернее я знал о проблеме, но не думал что ее можно исправить. Я полагал что sendmail долго подгружает любые SSL библиотеки и долго инициирует защищенное соединение, ну и соответственно медленная отправка писем это норма. Оказалось что sendmail-у просто не нравятся те библиотеки что лежат рядом с ним и это можно исправить. В следующей версии Open Server всё будет хорошо, а пока чтобы исправить у себя вам нужно сделать простую вещь:

Зайти в /modules/system/ и скопировать файлы libeay32.dll и ssleay32.dll в папку /modules/sendmail/ вместо тех что там сейчас находятся. И вуаля - скорость отправки через php-smtp и через php-openserver-smtp становится одинаковой. Только что сделал кучу тестов и измерений.

Добавлено: 21 дек 2013, 14:51
fooger
Максим, большое спасибо, это помогло. Но все же слегка чувствуется разница между php скриптом (где мгновенно), и OpenServer, где отправка происходит где-то четверть - пол секунды. Но все равно, это уже совершенно другое дело :)

Добавлено: 21 дек 2013, 19:22
Максим
fooger писал(а):Максим, большое спасибо, это помогло. Но все же слегка чувствуется разница между php скриптом (где мгновенно), и OpenServer, где отправка происходит где-то четверть - пол секунды. Но все равно, это уже совершенно другое дело :)
Нет, я делал измерения и время отправки одинаково, в обоих случаях отправка происходит за ~1.4 сек (проверял mail.ru). Возможно у вас в Open Server заполнены адрес логин и пароль для POP3, поэтому сервер сначала выполняет авторизацию по протоколу POP3 и только потом отправляет письмо через SMTP - в этом случае письмо будет отправляться в два раза дольше. Так же чуточку увеличивается время отправки если используется расширенное логирование email сообщений, отключить которое стало возможно лишь в последней версии Open Server.

Добавлено: 23 дек 2013, 08:45
fooger
Максим, отправляю через localhost, предварительную POP3 авторизацию не использую, расширенное логирование отключил.
Провел измерения:
1) Если отправлять с помощью php скрипта, время отправки в среднем занимает 20000-30000 микросекунд (одна секунда = 1 000 000 микросекунд), т.е 0.02-0.03 секунды
2) Если отправлять через OpenServer, среднее время отправки занимает 250000 микросекунд, т.е. 0.25 (четверть) секунды.

Как видно, если в моем случае отправлять email через OpenServer smtp, то отправка происходит заметно дольше: четверть секунды (что ощущается), против 1/50 секунды (что незаметно = мгновенно).

Добавлено: 23 дек 2013, 09:20
Максим
Спорить с вами не буду, для себя я тесты сделал и полностью в них уверен. По законам физики отправка через внешнюю программу, которая запускается функцией, всегда будет на доли секунды дольше чем через программу, которая уже запущена (собственно сам php). В общем вы можете думать как угодно, это ваше право. Еще раз спасибо что сообщили о наличии проблемы, которую удалось решить.

Добавлено: 23 дек 2013, 09:26
fooger
Максим писал(а):По законам физики отправка через внешнюю программу, которая запускается функцией, всегда будет на доли секунды дольше чем через программу, которая уже запущена (собственно сам php).
Возможно именно из-за этого и происходит задержка на доли секунды.

Спасибо Вам! :)

Добавлено: 24 дек 2013, 20:44
Redee
Вот решилось же, наконец дождались !))) УРА!)

Добавлено: 16 мар 2014, 23:38
Redee
Сегодня надо было потестить свой скрипт через отправку от smtp.gmail.com, вложения отправляются всеравно слишком долго.

Проверялось на картинках весом в районе 1-2Mb, все что более по таймауту выбивало, но как ни странно все равно приходили на другой gmail ящик.

Также провел тест - вкладываю архив с изображениями размером в районе 8Mb нажимаю отправить, жду 15 секунд примерно, нажимаю на веб-странице остановить, захожу во входящие на gmail через пол минуты где-то письмо пришло.

Наверное свинка зарыта в самой обработке писем при отправке через gmail.
Но все же кто сталкивался удавалось ли ускорить процесс?
Или надо тестить на postfix / exim...

Собственно код >
https://github.com/Redee/test/tree/master/send_mail

Настройки OpS >
Изображение

з.ы. Ход конем который описывался выше был проведен.
з.ы.ы. Или сам джимейл долго выпиливает, а локально поднимать почтовый сервер головняк.

Добавлено: 22 мар 2014, 15:16
Максим
1) Время отправки письма зависит от исходящей скорости вашего интернета.

2) Gmail не сразу обрабатывает письмо, пока не проверит его на вирусы, в частности все вложения. Это может занимать несколько минут.

3) Не понятно о каком таймауте идёт речь. Таймаут выполнения PHP скрипта? Таймаут в логах коннекта Sendmail? Таймаут и дисконнет от Google в логах того же Sendmail?

4) В Sendmail есть обработка содержимого писем, которая лишь заменяет переносы строк на правильные. Но на всякий случай в ближайшее время это проверю, вдруг влияет на скорость при обработке больших вложений (внутри писем вложения это тот же текст).