Почему я не должен использовать функцию mail () PHP?

Общее мнение, связанное с отправкой сообщений электронной почты на PHP, заключается в том, чтобы избежать использования встроенной функции PHP mail() и использовать библиотеку вместо нее.

То, что я хочу знать, – это фактические причины и недостатки использования mail() через библиотеку или расширение. Например, обычно заданные заголовки, которые не входят в стандартный вызов mail() .

Solutions Collecting From Web of "Почему я не должен использовать функцию mail () PHP?"

Цитата :

Недостатки функции PHP mail()

В некоторых случаях почта, отправляемая через PHP mail() , не получала получателей, хотя она была отправлена ​​WB без сообщения об ошибке. Наиболее распространенные причины этого вопроса перечислены ниже.

  • неправильный формат заголовка или содержимого почты (например, различия в разрыве строк между Windows / Unix)
  • sendmail не установлен или настроен на вашем сервере (php.ini)
  • почтовый провайдер recipeint не разрешает отправлять почту PHP mail() ; общая защита от спама

Ошибки в формате заголовка или содержимого могут привести к тому, что письма обрабатываются как СПАМ. В лучшем случае такие письма переносятся в папку спама вашего почтового ящика получателя или отправляются обратно отправителю. В худшем случае такие письма удаляются без каких-либо комментариев. Если sendmail не установлен или не настроен, почтовые сообщения не могут быть отправлены вообще.

Обычной практикой для бесплатного почтового провайдера, такого как GMX, является отклонение отправки почты через функцию PHP mail() . Очень часто такие письма удаляются без какой-либо информации получателя.

PHP- mail() как говорят, искажает заголовки и работает медленно. Я не могу сказать это из личного опыта, потому что я никогда не использовал его, потому что, как и вы, мне всегда советовали против него. Если вы посмотрите комментарии к записи для mail() в руководстве по PHP , вы можете увидеть некоторые проблемы, с которыми у них есть проблемы (особенно с заголовками).

Это определенно не подходит для отправки значительного количества электронной почты, потому что, согласно самому руководству,

Стоит отметить, что функция mail () не подходит для больших объемов электронной почты в цикле. Эта функция открывает и закрывает SMTP-сокет для каждого письма, что не очень эффективно.

Для отправки большого количества электронной почты см. Пакеты «PEAR :: Mail» и «PEAR :: Mail_Queue».

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

В принципе, это функция, которая работает, но не очень хорошо, и затмевается рядом лучших библиотек.

Важно не только функция mail (), но и сервер smtp, который вы используете вместе. Я использовал три разных SMTP-сервера с php: postfix, qmail, sendmail.

По моему опыту postfix был самым легким для работы с php mail (), но даже постфикс имел некоторые проблемы. Вы столкнетесь с небольшими ошибками. Это могут быть такие вещи, как получатели «to», получающие правильно структурированные электронные письма и получатели «bcc», получающие коррумпированные электронные письма. Вы потеряете много времени, пытаясь выяснить эти ошибки. И ваши исправления заставят ваш код работать неправильно с другими SMTP-серверами.

Проблема связана с обработкой заголовка электронной почты, и, к сожалению, PHP плохо справляется с этим. Недавно я перешел на «PHP Mailer». На нашем веб-сайте у нас есть два SMTP-сервера: один с постфиксным и один с qmail. «PHP Mailer» работал с обоими из них без дополнительной настройки.

Самая большая причина заключается в том, что mail () может напрямую разговаривать с почтовым сервером, и если вы не знаете, что делаете, когда вы дезинфицируете свой вход, хакер может обманывать ваш почтовый сервер при отправке почты, кроме того, что вы намерены , Большинство сторонних библиотек имеют лучшую санитарию (или лучшие API), чтобы помочь предотвратить это.