PHP mail()函数默认使用哪个SMTP服务器?是否有更好的选择?

13

我使用GoDaddy主机,并且目前使用PHP的mail()函数发送网站上的表单邮件。GoDaddy每天有1000封SMTP中继限制,但他们发誓我的PHP脚本不会超过这个限制。

  1. 由于mail()不需要SMTP信息,它是自动使用GoDaddy的(或者你所使用的任何其他主机)吗?

  2. 如果我的网站每天预计要发送超过1000封邮件(独立的实例,而非循环内),我应该使用不同的方法,还是mail()是正确的选择?


1
这是在 Linux 还是 Windows 上的 PHP? - Kev
这是在Linux上的共享托管:) - johnnietheblack
8个回答

13

Php默认使用本地邮件服务器。但是您可以在php.ini配置文件中指定此选项。

如果您需要发送更多电子邮件,您可能需要寻找不同的邮件服务器或选择其他托管方式。


1
我可以指定任何服务器吗?例如...我可以通过Gmail的服务器发送邮件,但保留我的域名吗?这可能看起来像一个愚蠢的问题,但在这方面我并不清楚。 - johnnietheblack
@johnnietheblack:如果您可以访问php.ini文件(即PHP的设置),则可以将SMTP服务器设置为任何您想要的内容。(这绝对不适用于任何类型的共享主机) - Piskvor left the building

11
请不要使用php的mail()函数,它只会将您的邮件发送到垃圾邮件中。相反,请使用SMTP php邮件程序函数。
为什么我们应该使用SMTP而不是PHP mail():
SMTP登录到邮件服务器上的实际帐户并通过SMTP将邮件发送到另一个邮件服务器。如果邮件服务器配置正确,则您的邮件将从邮件服务器上的实际帐户发送,并且不会被标记为垃圾邮件。
使用mail()函数发送的邮件在大多数情况下使用sendmail发送。没有进行身份验证,如果您在额外的标题中使用“From:”,它几乎总是会被标记为垃圾邮件。
这是因为如果您查看原始电子邮件文件(例如gmail),您将看到发送的标题。您实际上是从user@serverhostname.tld发送,而不是像您告诉邮件功能所做的那样从someone@example.com发送。 如果您使用SMTP并查看原始电子邮件,则实际上是从someone@example.com发送的。
您可以从以下位置下载SMTP类:
  1. https://code.google.com/a/apache-extras.org/p/phpmailer/source/browse/trunk/class.smtp.php?r=170
  2. http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html

7
在*nix机器上,PHP的`mail()`函数不支持SMTP,而是使用服务器上配置的sendmail()或其他邮件脚本。该脚本可以通过SMTP发送邮件,但这不是PHP中最简单的方法(除非您已经有该脚本)。要使用SMTP,我建议使用PHPMailer。我已经使用它几年了,印象很好。它支持SMTP以及许多其他协议,还具有其他有用功能,例如为HTML电子邮件添加纯文本正文和创建正确的电子邮件头。您还可以扩展类以设置默认值,例如SMTP服务器和发件人电子邮件/姓名,这样您就不必每次想要发送电子邮件时都进行设置。它还具有非常好的错误报告和调试功能。
我还建议使用此类发送数千封邮件。我最近一天内使用它发送了超过5000封邮件,没有任何问题。

4
如果你需要使用需要身份验证的外部电子邮件服务器,那么你将无法使用PHP mail() 函数。
我建议使用:http://pear.php.net/package/Mail

那么这是否意味着,如果我在GoDaddy托管,我就无法将我的mail()脚本指向另一个经过身份验证的SMTP,在不使用PEAR的托管服务上发送任意数量的邮件呢?感谢您的耐心 :) - johnnietheblack
1
mail() 函数非常基础,不支持向需要身份验证的 SMTP 主机发送用户名/密码键配对。您必须编写一堆自定义代码才能让 mail() 函数与其配合工作,这就是为什么我建议使用软件包 =P希望有所帮助。 - Chris S

3

mail()函数会使用php.ini中定义的设置。Windows服务器需要一个实际的SMTP服务器,而*nix服务器将使用安装在服务器上的任何MTA(如果有的话)。

正如其他人所提到的,如果您想要使用替代SMTP服务器,请使用类似SwiftMailer这样的替代库。此外,您需要确保SMTP服务器快速。我曾经看过使用像Gmail这样的SMTP服务器时出现的减速情况。

即使是托管在GoDaddy上的专用服务器,GoDaddy也使用智能SMTP中继。限制基于通过Smart中继发送的电子邮件数量。

如果您有合法的理由需要发送更多电子邮件,并且您可以验证您的站点不是垃圾邮件,并且所有电子邮件都是选择加入的,则支持将为您增加限制,如果您给他们估计需要发送的电子邮件数量。


2

因为这是一篇旧文章,所以我认为更新答案会很有帮助 -

现在比以前简单多了 :-) 在PHP 4中,PEAR邮件包通常已经安装好了,并且这个非常简单的教程向你展示了你需要添加到php文件中的几行代码。 http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm

大多数托管公司都列出了你所需的SMTP设置。我使用JustHost,他们在https://my.justhost.com/cgi/help/26上列出了他们的设置 (在传出邮件服务器下)


2

我已经使用开源项目phpmailer约七年了——它非常棒!你可以使用它连接到远程SMTP服务器。


1
如果您需要使用第三方邮件服务,我建议放弃使用mail()并改用SwiftMailer库。它是一个功能丰富的组件(支持身份验证、附件、加密等),我们已经在一些地方使用它。而且它也是免费和开源的。

我会去查看,谢谢 :) 它能够有效地进行批量邮件发送吗?比PEAR更好吗? - johnnietheblack
很遗憾,无法与PEAR邮件包进行任何比较。它似乎可以很好地处理大量的邮件发送,有一些客户正在使用它。 - Kev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接