使用PHP在本地主机发送邮件

15

我是php的新手。我试着使用这段代码发送邮件。

<?php

    $to      = 'sohil@gmail.com';
    $subject = 'The subject';
    $message = 'hello';
    $headers = 'From: sohil@yahoo.in' . "\r\n" .
        'Reply-To: receiver@yahoo.in' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);

?>

我已经更改了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 = sohil@gmail.com

& 在 sendmail.ini 中

# A freemail service example
account Gmail
tls on
tls_certcheck off
host smtp.gmail.com
from sohil@gmail.com
auth on
user sohil@gmail.com
password xxxxxxxxx

# Set a default account
account default : Gmail

现在代码运行成功,但我没有收到任何邮件。


3
你需要在本地安装邮件服务器,可以使用PHPMailer - Bora
或者使用远程SMTP服务器,例如GMAIL。 - user557846
你的代码看起来不错,但是在本地主机上运行时需要安装邮件服务器才能正常工作。 - chirag ode
Gmail使用TLS,您能否配置默认的邮件功能以使用TLS - DevZer0
@Tobias Kun:我已经将设置更改为smtp.gmail.com。现在代码成功运行,但是我没有收到任何邮件。 - Sohil Desai
显示剩余3条评论
7个回答

4

您需要修改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 = you@yourdomain

如果设置为localhost,则无法正常工作,因此请更改为您的邮件服务器。


1
你能为Ubuntu或Linux用户指定一些东西吗? - Chinmaya B

3

默认情况下,您不能直接从本地主机发送电子邮件,因为没有安装SMTP服务器。您可以在本地设置SMTP服务器或使用第三方SMTP服务器。请点击此处了解如何使用第三方SMTP服务器从本地主机发送邮件。


1
这条评论中的链接帮助我在Mac上本地设置了SMTP。谢谢! - surfbird0713
@surfbird0713 很高兴知道它对你有帮助! :-) - Mittal Patel

1

此功能在本地主机上无法使用,因为本地主机不会充当SMTP服务器。请将您的内容上传到安装了SMTP的有效服务器上,然后再进行邮件调用。


0
这是给我答案的链接:
安装“Windows下的假发送邮件”。如果您没有使用XAMPP,您可以在此处下载:http://glob.com.au/sendmail/sendmail.zip 修改php.ini文件以使用它(注释掉其他行):
邮件功能
仅适用于Win32。
SMTP = smtp.gmail.com

smtp_port = 25

仅适用于Win32。

sendmail_from = <e-mail username>@gmail.com

仅适用于Unix系统。您也可以提供参数。
(default: "sendmail -t -i").

sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

(忽略"仅限Unix"部分,因为我们实际上正在使用sendmail)

然后您需要配置sendmail安装目录中的 "sendmail.ini" 文件:

sendmail

smtp_server=smtp.gmail.com
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=<username>
auth_password=<password>
force_sender=<e-mail username>@gmail.com

0

尝试在您的php.ini中设置以下内容:

  1. 将“SMTP”设置为“mail.YourDomain.com”
  2. 将“smtp_port”设置为“25”

或者您也可以使用php脚本来设置此选项,

// 请指定您要使用的邮件服务器或其他邮件服务器。(例如gmail,yahoo)

ini_set("SMTP","mail.YourDomain.com");

请指定一个SMTP号码,25和8889是有效的SMTP端口。
ini_set("smtp_port","25");

0

您的服务器没有本地邮件服务器。

有几个解决方案:

  • 如果您拥有足够的权限,请安装本地邮件服务器
  • 更改您的PHP设置以使用其他邮件服务器(其他开放式邮件服务器或基于身份验证的邮件服务器,如Gmail、Yahoo等)
  • 使用其中一个支持IMAP / POP3的可用邮件库来处理邮件发送。SwiftMailer或Pear Mail是最常用的之一。

0

这几周我在我的CentOS机器上遇到了这个问题,与其他遇到PHP中mail()未发送的问题的人分享。这解决了我所有使用mail()的PHP脚本的问题。

// Enable the sendmail in selinux
setsebool -P httpd_can_sendmail 1

// Add the following to /etc/postfix/main.cf
relayhost = smtp.server.com

// Then from command line
service postfix restart

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