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

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

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

Ответ 1

Цитата:

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

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

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

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

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

Ответ 2

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

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

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

Для отправки больших количеств электронная почта, см. "PEAR:: Mail" и " PEAR:: Mail_Queue.

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

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

Ответ 3

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

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

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

Ответ 4

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