Назад | Перейти на главную страницу

Postfix + Php Mail () VS Postfix + SMTP

Большинство CMS (например, Joomla) поставляется с php mail() по умолчанию и имеет возможность изменить его на SMTP если захотим. Я буду настраивать и веб-сервер, и почтовый сервер (Postfix) на одном и том же VPS в Debian 7. Я пытаюсь понять следующее:

  1. Репутация доставки: Будет ли использование php mail () vs SMTP иметь какое-либо значение для скорости доставки? Насколько я понимаю, Postfix будет использовать протокол SMTP при общении с другими серверами в Интернете при доставке писем, поэтому можно с уверенностью предположить, что не имеет значения, было ли письмо отправлено на postfix через почту php или smpt с localhost. ? Влияет ли какой-либо из этих двух методов на репутацию электронной почты хоть каким-то образом?

  2. Нагрузка на производительность: Есть ли разница в производительности между php mail и SMTP при отправке писем? Скажем, если я отправлю около 10 000 писем, какой метод потребует больше всего ресурсов (или времени)? Я предполагаю, что и то, и другое может занять некоторое время, например: php mail для компиляции писем с заголовками и т. Д. И SMTP для создания соединений каждый раз. Какой из них потребляет больше всего ресурсов сервера?

  3. Проблема безопасности: Когда я искал разницу между ними, многие сайты говорят о проблеме безопасности с почтой php, поскольку хакер может загрузить скрипт php для рассылки спама. Но я также вижу еще одну проблему безопасности с SMTP, поскольку имя пользователя и пароли SMTP хранятся в файле конфигурации в текстовом виде, что тоже небезопасно. Поскольку у обоих методов есть проблемы с безопасностью, весит ли один по каким-либо аспектам лучше другого?

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

Предыстория: Моя машина будет простым веб-сервером, который использует postfix только для отправки электронных писем из Joomla, информационных бюллетеней и корневых писем из различных служб.

Вы правы, что это не имеет значения для других, но, безусловно, будет иметь значение для вас, потому что при отправке через SMTP Postfix может отказаться принять ваше сообщение по причинам, не зависящим от вас. Это означает, что вам придется использовать свои собственные очереди доставки и добавлять другой раздутый код. Фактически вы будете выполнять работу Postfix.

Некоторые могут сказать, что mail() также может не работать, но сам по себе он работает так же просто, как запись вашего сообщения в файл. Другими словами, ломать особо нечего.

Итог: если вам абсолютно не требуется использовать SMTP, используйте почтовую программу вашей системы.

Во многих случаях сценарии рассылки спама загружаются автоматически после того, как автоматический сканер обнаруживает уязвимость в вашем веб-приложении. Эти спам-скрипты почти всегда используют php. mail() функция, а не SMTP. Если кто-то взломал ваш сервер и взял пароли smtp из файла конфигурации, то вы все равно потеряли замок. Но во многих автоматических атаках на устаревшие CMS и т. Д. Скрипты рассылки спама просто используют mail(). Поэтому я предлагаю вам отключить mail() в вашем постфиксе и используйте только аутентифицированный SMTP.

Репутация доставки: Будет ли использование php mail () vs SMTP иметь какое-либо значение для скорости доставки? Насколько я понимаю, Postfix будет использовать протокол SMTP при взаимодействии с другими серверами в Интернете при доставке писем, поэтому можно с уверенностью предположить, что не имеет значения, было ли письмо отправлено на postfix через почту php или smpt с localhost ? Влияет ли какой-либо из этих двух методов на репутацию электронной почты хоть каким-то образом?

Никакого отношения ко всему. Postfix может получить электронная почта через mail () и SMTP. После его обработки postfix будет Отправить через SMTP.

Нагрузка на производительность: Есть ли разница в производительности между php mail и SMTP при отправке писем? Скажем, если я отправлю примерно 10 000 писем, какой метод потребует больше всего ресурсов (или времени)? Я предполагаю, что и то, и другое может занять некоторое время, например: php mail для компиляции писем с заголовками и т. Д. И SMTP для создания соединений каждый раз. Какой из них потребляет больше всего ресурсов сервера?

Сравните это! У меня нет данных по этому поводу.


Вот какой процесс задействован в mail () и SMTP?

В команде mail () PHP вызывает команду sendmail, и программа помещает вашу электронную почту в файл в каталоге очереди maildrop. Демон раскладки сканирует этот каталог и перемещает сообщение электронной почты демону очистки.

В первом SMTP PHP создает соединение с вашим постфиксным сервером через SMTPd. После завершения SMTP-ритуала SMTPd будет проверять, разрешены ли электронные письма. Если адрес электронной почты разрешен, он передаст его демону очистки.

Источник: официальная документация постфикса


Проблема безопасности: когда я искал разницу между ними, многие сайты говорили о проблеме безопасности с почтой php, поскольку хакер может загрузить скрипт php для рассылки спама. Но я также вижу еще одну проблему безопасности с SMTP, поскольку имя пользователя и пароли SMTP хранятся в файле конфигурации в текстовом виде, что тоже небезопасно. Поскольку у обоих методов есть проблемы с безопасностью, весит ли один по каким-либо аспектам лучше другого?

Как сказал @Tutul в другом ответе, вы, вероятно, ожидаете, что какой-то скрипт спама использует mail () для отправки спама. Да, это одно из соображений блокировки почтовой команды в php.

Однако действует один принцип: как только кто-то успешно разместит скрипт на вашем веб-сервере и почтовом сервере, он сможет использовать возможность PHP для отправки электронной почты либо через mail (), либо через SMTP..

В самом php нет защиты, ограничивающей количество SMTP-соединений или mail (), которые могут быть вызваны спамером. Одно место для размещения линии защиты - MTA (постфикс). К сожалению, вы не можете ограничить входящую почту, вызванную командой mail (). Однако вы можете ограничить количество отправляемых запросов, которые могут быть отправлены через SMTP-соединение. Политический или postfwd может помочь Postfix задросселировать его.

Примечание. Вышеупомянутое объяснение касается процесса дросселирования при получении электронной почты. Конечно, вы можете ограничить его при отправке электронной почты. Например, вы ограничиваете 20 писем в минуту на @ gmail.com, чтобы демон черного списка GMAIL не заблокировал вас. См. Документы о Настройка производительности Postfix

Заключительное примечание

ИМХО, я предпочитаю отправлять электронную почту через SMTP. Вы можете использовать MTA как дополнительную защиту от спама. Возможно, вам придется обрабатывать другую очередь почты в PHP, как сказал @Sanmain в другом ответе :)