После переустановки софта на сервере FreeBSD, был замечен факт, что sendmail не сразу отправляет почту, а с задержкой в 5-10 секунд. Функция PHP mail(), которая отправляет письма через sendmail - то же самое: вызываемый скрипт тормозил и завершал свою работу только через 5-10 секунд. Сообщения в журнале (см. delay, xdelay):
Feb 18 00:46:16 server sendmail[34167]: gethostbyaddr(192.0.2.1) failed: 1 Feb 18 00:46:16 server sendmail[34153]: t1HLk8S5034151: to=user@example.com, ctladdr=kak (1001/0), delay=00:00:08, xdelay=00:00:08, mailer=esmtp, pri=30034, relay=mail.example.com. [192.0.2.1], dsn=2.0.0, stat=Sent (Ok: queued as 733976B2381E)
При этом локальный sendmail работает только на IP 127.0.0.1 и недоступен для внешнего мира. Оказалось, что задержку создаёт MSP (Message Submission Program) - процесс, отвечающий за обработку почтовой очереди. Задержка создавалась данным процессом на этапе проверки корректности email-адреса отправителя письма. Чтобы задержки не было, достаточно отключить эту проверку.
В make.conf указываем не создавать автоматически submit.cf.
# vi /etc/make.conf
SENDMAIL_CF_DIR= /usr/share/sendmail/cf SENDMAIL_SET_USER_ID=yes
Удаляем submit.cf, останавливаем sendmail, меняем для бинарника sendmail права SGID на SUID (2755→4755) и запускаем sendmail.
# cd /etc/mail # rm submit.cf # make stop # chmod 4755 /usr/sbin/sendmail # make start
Готово, отправляем тестовое письмо для проверки скорости реакции sendmail.
# echo "test" | mail -s"asdf" user@example.com