为什么我不应该使用PHP的mail()函数?

关于在PHP中发送电子邮件的一般意见是保持清除PHP的内置mail()函数,并使用库来代替。

我想知道的是通过库或扩展使用mail()的实际原因和缺陷。 例如,标准mail()调用中不包含的通常指定的头文件。

引用 :

PHP mail()函数的缺点

在某些情况下,邮件通过PHP mail()没有收到收件人,虽然它是由WB发送没有任何错误信息。 下面列出了这个问题最常见的原因。

  • 邮件标题或内容的错误格式(例如,Windows / Unix之间的换行符差异)
  • sendmail未在您的服务器上安装或configuration(php.ini)
  • recipeint的邮件提供者不允许通过PHP mail()发送mail() ; 常见的垃圾邮件保

标题或内容格式错误可能导致邮件被视为垃圾邮件。 在最好的情况下,这些邮件将被转移到收件人收件箱的垃圾邮件文件夹中,或者发送回发件人。 在最坏的情况下,这些邮件被删除,没有任何评论。 如果sendmail没有安装或没有configuration,根本不能发送邮件。

GMX等免费邮件提供商通常会拒绝通过PHP函数mail()发送mail() 。 很多时候这样的邮件被删除,没有收件人的任何信息。

PHP的mail()被认为是乱码,运行缓慢。 我不能从个人经历中说这个,因为我从来没有用过,因为像你一样,我总是被劝阻。 如果您在PHP手册中查看关于mail()的条目的评论,您可以看到一些人的问题(尤其是头文件)。

这绝对不适合发送任何大量的电子邮件,因为根据手册本身,

值得注意的是mail()函数不适合循环中的大量电子邮件。 此function打开和closures每个电子邮件的SMTP套接字,这不是很有效。

要发送大量的电子邮件,请参阅»PEAR :: Mail和»PEAR :: Mail_Queue软件包。

AFAIK,无论发送的邮件数量多less,打开和closures每个邮件的套接字都是不可取的(性能方面)。

基本上,这是一个有效的function,但不是很好,被许多更好的图书馆所黯然失色。

重要的不仅是mail()函数,还有你使用的smtp服务器。 我用了三个不同的smtp服务器:php:postfix,qmail,sendmail。

在我的经验中,postfix是使用php mail()的最简单的工具,但即使是postfix也有一些问题。 你会遇到小错误。 可能是诸如“收件人”收到正确结构化的电子邮件和“密件抄送”收件人收到损坏的电子邮件。 你会失去很多时间试图找出这些错误。 而你的修复将使你的代码不能正常工作与其他smtp服务器。

问题在于电子邮件标题的处理和PHP不幸的是做了一个糟糕的工作。 最近我切换到“PHP梅勒”库。 在我们的网站中,我们有两个smtp服务器,一个是postfix,一个是qmail。 “PHP梅勒”与他们两个没有额外的configuration工作。

最大的原因是mail()可以直接与邮件服务器通信,如果在清理input时不知道自己在做什么,黑客可能会欺骗邮件服务器发送邮件以外的邮件。 大多数第三方图书馆有更好的卫生条件(或更好的API)来帮助防止这种情况。