localhost上的php mail()函数

时间:2011-03-17 17:27:54

标签: php email localhost wampserver

我在localhost服务器上遇到php mail()函数的问题。当我尝试发送带有php功能的电子邮件时,我无法在localhost上测试我的电子邮件应用程序 mail()

我收到了这个错误 Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in F:\wamp\www\product\ajax.php on line 64

我正在使用WAMP服务器,如果有人知道解决方案,请帮助我。

6 个答案:

答案 0 :(得分:14)

您需要在计算机上设置邮件服务器才能使邮件功能正常工作。如果您使用的是Windows(我猜您来自使用WAMP),您可以设置Pegasus mail server

其他选项包括使用包装类(如SwiftMailerPHPMailer)并使用它们连接到另一个SMTP服务器,例如您的GMail帐户。即使您在自己的localhost路由上使用Pegasus邮件服务器,我仍然建议使用上面提到的两个类中的一个。它们为您提供了更大的灵活性,更安全。

连接到您的ISP SMTP服务器或GMail或其他最简单的路由。

答案 1 :(得分:7)

在这个php邮件功能问题上花了2天之后,我已经弄明白并且会帮助你做同样的事情。浪费了足够的时间,让我们开始......

PHP有一个内置的php邮件功能,可用于从脚本发送邮件,但此功能在某种程度上受到限制,因为它无法将您连接到简单的邮件传输协议(SMTP)服务器。我假设你正在使用WAML / XAMPP,我们还没有真正尝试过XAMPP,但是你可以想到这一点:

首先,我们必须找到一种方法将我们的Web服务器(wamp)连接到外部SMTP。在这种情况下我们会使用Gmail,但在此之前,我们需要下载/安装一个工具,该工具可以从php脚本中获取我们的电子邮件并将其推送到Gmail SMTP。

  1. 首先转到http://glob.com.au/sendmail/并点击下载sendmail.zip进行下载。
  2. 下载后,提取到C:\wamp\将其解压缩为文件夹,这意味着它的内容应位于名为sendmail的文件夹中,并且位于C:\wamp\sendmail
  3. 现在在发送邮件文件夹中,右键单击sendmail.ini并以管理员身份打开,因为我们即将修改其内容。
  4. 更改以下行

    [sendmail]
    smtp_server=smtp.gmail.com
    smtp_port= 465
    smtp_ssl=ssl
    default_domain=localhost
    error_logfile=error.log
    debug_logfile=debug.log
    auth_username= enter your gmail account here        
    auth_password= enter the password for that account here
    ;pop3_server=
    ;pop3_username=
    ;pop3_password=
    ;force_sender=
    ;force_recipient=
    hostname= localhost 
    

    请注意,如上所述。我已从sendmail.ini文件中删除了大部分不需要的内容,以使内容更容易阅读。

  5. 保存文件

  6. 导航到您的wamp文件夹并转到bin\apache\apache[version here]\bin\php.ini并以管理员身份修改php文件,如下所示:

    如果您使用记事本,可以使用编辑选项卡下的查找或 ctrl + F 并输入"邮件功能&#34 ; 快速导航到php.ini文件的邮件功能部分。

    [mail function]
    ;For Win32 only.
    ;http://php.net/smtp
    ;SMTP = localhost
    ;http://php.net/smtp-port
    ;smtp_port = 25
    
    ;For Win32 only.
    ;http://php.net/sendmail-from
    ;sendmail_from = 
    
    ;For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    ;http://php.net/sendmail-path
    sendmail_path = "C:\wamp\sendmail\sendmail.exe -t -i" ----> this is the changed part. 
    

    注意:只有sendmail_path才需要更改为上述内容。在您看到它们时保留其他设置。 根据您将sendmail文件夹解压缩到的位置,您的路径可能会有所不同。

  7. 保存php.ini档案

  8. 返回C:\wamp\bin并选择php\php[version here]\php.ini并按上述方式编辑sendmail路径并以管理员身份保存文件/或在打开之前,通过右键单击以管理员身份打开

  9. 以管理员身份运行wampserver,当它变为绿色时,请打开以下内容:

    左键单击绿色图标并移至php - > php扩展 - > php_sockets(点击对其进行黑色检查)

    等待图标再次变为绿色,然后按照上面的步骤打开php_openssl。

    如果图标变为绿色,则当您单击绿色wampserver图标时,可以通过移动到apache icom来打开apaches ssl_module。您可以在Apache模块中找到它。

    当你完成退出上面的三个步骤并再次运行wampserver作为管理员来实现更改。

  10. 移回sendmail解压文件夹并右键点击sendmail.exe
    转到其属性 - >兼容性 - >更改所有用户的设置 - >兼容模式[更改为Windows XP(Service Pack 3)] - >以管理员身份运行此程序[选中此选项]。

    保存并申请。
    我们必须这样做,这样每次我们调用sendmail应用程序时,它都会以管理员身份运行。

  11. 现在我们需要配置我们的Gmail帐户才能使用此sendmail应用程序。 登录gmail帐户,在右上角单击齿轮以选择设置。在设置中,转到转发和POP / IMAP选项卡并启用IMAP。保存更改

  12. 最后回到您的收件箱,电子邮件地址旁边的最右上角是一个向下的小箭头,单击它以选择我的帐户。如果您没有,可以尝试点击您的个人资料照片,从那里选择我的帐户。

    点击登录&安全选项卡并向下滚动到页面底部。你会发现允许不太安全的应用程序:并打开它。大多数情况下,这将是关闭。

  13. 您需要这样做,现在可以从localhost上的php脚本发送电子邮件。您现在可以使用4个最小参数尝试mail()函数并查看。希望这可以帮助。投票,如果它有帮助,所以我可以花时间发布更有趣的解决方案。

答案 2 :(得分:1)

这是在Windows上使用mail()的一个众所周知的问题,您通常没有本地SMTP服务。正如您的错误消息所示,您需要在php.ini中定义SMTP设置,以便与允许您发送出站消息的邮件服务器通信,无论是否经过身份验证。 See mail() docs.

答案 3 :(得分:0)

尝试为localhost设置邮件服务器。否则它将无法在localhost中运行。

答案 4 :(得分:0)

我发现在Windows中创建邮件服务器的最简单方法是安装Python,然后将内置的SMTP调试服务器与以下代码一起使用:

python -m smtpd -c DebuggingServer -n localhost:25

在Windows上,我发现它有时在localhost和127.0.0.1中具有奇怪的行为,因此,如果所有其他方法均失败,则可以尝试使用“ ipconfig”命令(在DO​​S命令提示符下)找到IP地址,然后可能会看到类似的内容:

c:\> ipconfig

-- stuff cut here ---

Wireless LAN adapter WiFi:

Connection-specific DNS Suffix  . :
Link-local IPv6 Address . . . . . : fe80::856d:fd33:3e01:e656%9
IPv4 Address. . . . . . . . . . . : 192.168.8.111
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.8.1

,假设您发现ip地址为192.168.8.11(就像我在上面的示例中所做的一样),然后将命令更改为:

python -m smtpd -c DebuggingServer -n 192.168.8.11:25

并在php.ini文件中设置以下几行:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = 192.168.8.111
; http://php.net/smtp-port
smtp_port = 25

而且,这在我无能为力的场合对我有用!

我还注意到您可以通过键入以下命令来检查本地邮件服务器是否正常工作:

C:/> telnet localhost 25

或者是我的第二种配置:

C:/> telnet 192.168.8.111 25

Telnet在Linux上是免费提供的,但要在Windows上获得它,您必须转到“程序和功能”,然后单击“打开和关闭Windows功能”(在左侧小面板中),然后选中该框Windows功能列表中的“ Telnet客户端”。

运行telnet命令时,如果服务器未运行,您将看到类似以下内容:

C:\Projects>telnet localhost 25
Connecting To localhost...Could not open connection to the host, on port 25: Connect failed

但是,如果一切正常,则应该清除屏幕,并从邮件服务器返回“服务器标识符”字符串。在我的机器上,它看起来像:

220 ZOOT Python SMTP proxy version 0.3     

如果您真的很热衷,可以在其中键入一些SMTP命令并发送邮件,也可以键入“退出”以断开与服务器的连接。

答案 5 :(得分:0)

我使用了一个简单的工具Test mail server。它将.eml输出文件保存在一个文件夹中,并在使用mail()函数时自动将其打开。