我正在尝试发送一封包含以下功能的电子邮件作为测试功能:
function SendEmail($to, $subject, $body, $headers)
{
ini_set("SMTP", "smtp.myexistingdomain.com");
mail($to, $subject, $body, $headers);
}
我收到此错误:
警告:mail()[function.mail]:无法连接到mailserver “smtp.myexistingdomain.com”端口25,验证您的“SMTP”和 php.ini中的“smtp_port”设置或使用ini_set()
答案 0 :(得分:3)
PHP不实现SMTP协议。 PHP的mail() - 围绕着sendmail二进制文件。在unix / linux上运行正常。 但是在Windows上(来自PHP.net手册):
mail()的Windows实现在很多方面与 Unix实现。首先,它不使用本地二进制文件 编写消息但只能在直接套接字上运行,这意味着一个 需要MTA监听网络套接字(可以在网络套接字上) localhost或远程机器。)
所以 - 故事的寓意 - 你需要安装邮件服务器。
如果您希望在不安装自己的邮件服务器的情况下发送电子邮件(这可能是* ss的痛苦) - 您必须使用实际实现SMTP协议的库,从而允许您连接到其他SMTP服务器。 这些现在最受欢迎:
使用这些库可以轻松构建文本或html消息。添加文件也很容易。
/*******************************************************************
Example of sending email using gmail.com SMTP server and phpmailer
*******************************************************************/
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 0; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = GUSER;
$mail->Password = GPWD;
$mail->SetFrom($from, $from_name);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AddAddress($to);
if(!$mail->Send()) {
$error = 'Mail error: '.$mail->ErrorInfo;
return false;
} else {
$error = 'Message sent!';
return true;
}
答案 1 :(得分:0)
你确定这个域工作,并且smtp服务器在端口25上是活动的吗? 安全smtp traffice使用不同的端口,谷歌可以告诉你哪一秒:)
如果你的电脑上安装了telnet,你可以试试这个:
打开命令提示符,键入:telnet smtp.myexistingdomain.com 25 当它连接时,你可以确定域工作,并有一个监听smtp服务器。 如果失败,smtp服务器可能无法访问或使用不同的端口。
您可以检查的另一件事是,是否在php.ini文件中设置了正确的凭据, 大多数smtp服务器都需要身份验证。
答案 2 :(得分:0)
SMTP设置仅适用于Windows。您是否可以通过telnet直接连接到该主机/端口?如果PHP外部但在主机上运行的东西也无法连接,那么这不是正确的主机名,它不是在端口25上侦听,和/或存在防火墙问题。