Сервер SMTP берет 30 + секунды для принятия сообщения, как сделать его быстрее?

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

2
задан 2 April 2014 в 14:22
6 ответов

Вы ничего не говорите нам о своей конфигурации, но согласно вашему "журналу" время соединения и время обработки конверта в порядке, медленно обрабатывается только тело письма.

Итак, вот 2 объяснения в порядке вероятности:

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

Если вам нужны дополнительные подсказки, подробно опишите конфигурацию smtp: программное обеспечение, файлы конфигурации, конфигурацию ОС.

2
ответ дан 3 December 2019 в 10:05

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

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

• Type: telnet smtp.server.com 25 and hit enter
     The Command will connect to the smtp server on port 25 
     which is used by the SMTP server to communicate
• Type: HELO localhost and hit enter 
     You can type anything instead of localhost like yourdomain.com
• Type: MAIL FROM: youremail@yourdomain.com and hit enter
     Replace youremail@yourdomain.com with your email address
• Type RCPT TO: email@domain.com and hit enter
     Replace email@domain.com to the email address you want to send the email to
• Type: DATA and hit enter
• Type: this is a test email and hit enter
• Type: . and hit enter
• Type: QUIT and hit enter
4
ответ дан 3 December 2019 в 10:05

Почтовый сервер может выполнять множество проверок адреса отправителя. Большинство этих проверок связано с поиском в DNS. Если DNS неправильно настроен на сервере или если домен отправителя настроен неправильно, время ожидания некоторых из этих запросов DNS может истечь. Обратный DNS на клиентском IP-адресе также мог быть неправильно настроен, так что время поиска истекло.

Две проверки, которые иногда выполняются, связаны с другим сетевым взаимодействием.

Почтовый сервер может подключаться к демону аутентификации на клиентском IP-адресе. Если клиент использует неправильно настроенный брандмауэр, пакет SYN, отправленный на порт 113, теряется. После нескольких попыток сервер откажется.

Почтовый сервер может также подключиться к MX для домена отправителя, чтобы проверить, существует ли адрес отправителя. Эта конкретная проверка используется редко, так как при неправильном выполнении она может привести к серьезному сбою.

Чтобы определить, что из вышеперечисленного имеет место, нужно проверить сетевой трафик. Эту проверку можно выполнить с помощью tcpdump или wirehark.

0
ответ дан 3 December 2019 в 10:05

Попробуйте прикрепить strace к вашему процессу sendmail и посмотрите, что он дает вам, когда вы вручную набираете почту из команды (конечно, вы должны убедиться, что к этому времени никто другой не использует службу SMTP. Это должно дать вам лучшее представление о том, какая проверка отправителя выполняется медленно. Если вы не знаете, как пользоваться Стивом, это простое сообщение в блоге может оказаться полезным (особенно главы 3 и 4).

http://www.hokstad.com/5-simple-ways-to-troubleshoot-using-strace

0
ответ дан 3 December 2019 в 10:05

Тот факт, что вы видите задержку между «MAIL FROM» и следующей командой, означает, что sendmail проверяет адрес отправителя. Этот настоятельно указывает на проблему с DNS / сетью, но вы говорите, что поиск DNS вручную - это нормально. Если этот почтовый сервер использует управляемый вами DNS-сервер, не могли бы вы попробовать включить ведение журнала запросов, чтобы увидеть, какие вопросы задаются (и сколько времени DNS-сервер отвечает)?

Вы говорите «один из наших SMTP-серверов». серверы медленно принимают электронные письма ». Это означает, что другие ваши SMTP-серверы не демонстрируют такого поведения. Так ли это? Если так, то' Чем отличается этот?

Если проблемный сервер используется в производственной среде, вы можете попробовать запустить дополнительный экземпляр sendmail, который прослушивает другой порт, чтобы вы могли повысить уровень отладки. Альтернативой было бы использование strace, как предлагает alxgomz. Если вы устанавливаете начальное соединение с помощью telnet, вы можете просто ограничить дочерний процесс, который обрабатывает ваше сообщение, а не все SMTP-соединения.

0
ответ дан 3 December 2019 в 10:05

Используете ли вы example.com в своем тесте (как указано в вашем скрипте ruby)? Возможно, у вас возникли проблемы, когда нет записей MX, которые нужно вернуть. Вы пробовали это с реальными адресами электронной почты? Задержка только для определенных доменов?

-2
ответ дан 3 December 2019 в 10:05

Теги

Похожие вопросы