【问题标题】:Help with PHP mail() function [duplicate]帮助 PHP mail() 函数[重复]
【发布时间】:2011-10-14 08:45:00
【问题描述】:

可能重复:
php mail() function on localhost

我正在尝试在我的网站上进行一些本地主机测试以恢复密码,但是当我尝试发送电子邮件时,我收到以下错误:

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()

这是我的 php.ini 文件中的相关设置。

; 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 = you@yourdomain

我不确定为本地主机测试设置什么。我意识到我需要将SMTP 设置为我的提供商的邮件服务器,但我在共享办公楼工作,所以我什至不知道如何找出谁在这里提供互联网。

提前致谢。

【问题讨论】:

    标签: php email


    【解决方案1】:

    PHP 的 mail() 函数不直接实现 SMTP 协议。相反,它依赖于 sendmail() MTA(SMTP 服务器),或类似 postfix 或 mstmp 的替代品。 只要安装了 MTA,它就可以在 Unix 上正常工作。

    在 Windows 上(来自 PHP.net 手册):

    mail() 的 Windows 实现在许多方面与 Unix 实现。首先,它不使用本地二进制文件 撰写消息,但仅在直接套接字上运行,这意味着 需要 MTA 侦听网络套接字(可以在 本地主机或远程机器)。

    所以 - 故事的寓意 - 你需要安装邮件服务器。

    但是 - 如果仅用于测试目的 - 只需获取一个实际实现 SMTP 协议的 PHP 库并使用您的常规 gmail 电子邮件地址发送电子邮件:

    不要使用 PHP 的 mail(),而是使用以下之一:

    1. PHP 邮件程序
    2. SwiftMailer
    3. Zend\Mail

    这些 PHP 库实际上实现了 SMTP 协议,因此可以轻松地从任何平台发送电子邮件,而无需在同一台机器上安装电子邮件服务器:

    PHPMAILER 示例:

    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->Host       = "stmp.gmail.com"; // SMTP server
    $mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    // 1 = errors and messages
    // 2 = messages only
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
    $mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
    $mail->Port       = 465;                   // set the SMTP port for the GMAIL server
    $mail->Username   = "some_email@gmail.com";  // GMAIL username
    $mail->Password   = "pass111";            // GMAIL password
    $mail->SetFrom('some_email@gmail.com', 'My name is slim shady');
    $mail->AddReplyTo("some_email@gmail.com","My name is slim shady");
    $mail->Subject    = "Hey, check out http://www.site.com";
    $mail->AltBody    = "Hey, check out this new post on www.site.com"; // optional, comment out and test
    $mail->MsgHTML($body);
    $address = "some_email@gmail.com";
    $mail->AddAddress($address, "My name is slim shady");
    

    【讨论】:

      【解决方案2】:

      PHP 的邮件需要本地邮件服务器才能运行。

      编辑:作为mail() reveils 的 PHP 文档站点,您可以使用来自PEAR 的邮件包。

      【讨论】:

      • ...或者你可以使用 ISP 的。
      【解决方案3】:

      出于测试目的,我建议设置一个像 Dumbster 这样的假邮件服务器。

      http://quintanasoft.com/dumbster/

      【讨论】:

        猜你喜欢
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 2015-01-09
        • 1970-01-01
        • 2017-08-07
        • 2015-04-16
        相关资源
        最近更新 更多