当涉及到使用PHP发送电子邮件消息时,普遍的意见是要避免使用PHP内置的mail()
函数,而是使用库。
我想知道使用mail()
而不是库或扩展的实际原因和缺陷。例如,在标准的mail()
调用中没有包含的常用指定头。
当涉及到使用PHP发送电子邮件消息时,普遍的意见是要避免使用PHP内置的mail()
函数,而是使用库。
我想知道使用mail()
而不是库或扩展的实际原因和缺陷。例如,在标准的mail()
调用中没有包含的常用指定头。
引用:
PHP的
mail()
函数的缺点在某些情况下,通过PHP
mail()
发送的邮件虽然没有出现任何错误消息,但收件人无法接收邮件。造成这种问题的最常见原因如下:
- 电子邮件标题或内容格式不正确(例如Windows / Unix之间的行换行符差异)
- 您的服务器未安装或配置sendmail(php.ini文件)
- 收件人邮件服务提供商不允许通过PHP
mail()
发送邮件;这是常见的垃圾邮件保护措施。标题或内容格式错误可能会导致邮件被视为垃圾邮件。在最好的情况下,此类邮件将传输到您收件箱的垃圾邮件文件夹或返回给发件人。在最坏的情况下,此类邮件将被删除而不做任何评论。如果sendmail未安装或未配置,则根本无法发送邮件。
像GMX这样的免费邮件提供商通常会拒绝通过PHP函数
mail()
发送的邮件。这类邮件通常会被删除而不提供任何有关收件人的信息。
据说PHP的mail()
函数会破坏邮件头并且运行缓慢。我个人没有使用过它,因为像你一样,我也被建议不要使用它。如果您查看PHP手册中mail()
条目的评论,您可以看到人们遇到的一些问题(特别是与邮件头相关的问题)。
根据手册本身的说明,它绝对不适合发送大量的电子邮件:
值得注意的是,
mail()
函数不适合在循环中发送大量的电子邮件。该函数为每封电子邮件打开和关闭一个SMTP套接字,这并不是非常高效的。对于发送大量电子邮件,请参阅» PEAR::Mail和» PEAR::Mail_Queue软件包。
据我所知,无论您发送多少邮件,每个消息都打开和关闭一个套接字从性能上来说都不是首选。
基本上,它是一个能工作但并不完美的函数,并被许多更好的库所取代。