我有一个家庭网络,里面有一台 XP 和一台 Ubuntu (9.10) 机器。我创建了一个小型测试 php 脚本,用于检查我是否可以从我的机器发送电子邮件。我使用相同的 php.ini 文件和相同的 [邮件设置],但该文件在我的 XP 机器上有效,但在 Ubuntu 机器上却失败了。我在这里附上了脚本,希望有人能发现问题所在:
<?php
// send e-mail to ...
$to="[email protected]";
// Your subject
$subject="Test Email";
// From
//$header="from: test script";
$header='From: host-email-username@hostdomain_here' . "\r\n" .
// Your message
$message="Hello \r\n";
$message.="This is test\r\n";
$message.="Test again ";
// send email
$sentmail = mail($to,$subject,$message,$header);
// if your email succesfully sent
if($sentmail){
echo "Email Has Been Sent .";
}
else {
echo "Cannot Send Email ";
}
?>
由于显而易见的原因,这些电子邮件已被伪造,但除此之外,脚本与我测试的完全一样
[编辑] 此后,我在 Ubuntu 机器上安装了 mailutils 包,现在脚本运行并返回“电子邮件已发送”。但是,邮件从未到达我的邮箱(到目前为止我已经等了 1 天)。我还需要查看其他内容吗?
答案1
你能从那台机器的命令行直接发送邮件吗?如果不能,那就是问题所在——机器设置不正确。
我认为该mail()
函数可以使用多种不同的方法来发送邮件,使用默认方法sendmail
或替代方法。也许这部分是你需要查看的地方。
答案2
您可能需要设置通过 SMTP 服务器发送邮件。例如,如果您使用 Gmail,这里有一篇很好的文章,其中有关于如何通过 Gmail 的 SMTP 服务器发送的分步说明: http://www.marksanborn.net/linux/send-mail-postfix-through-gmails-smtp-on-a-ubuntu-lts-server/
他列出的许多命令都需要超级用户访问权限,或以“sudo”为前缀。
我第一次使用就成功了。如果你没有成功,一定要查看该页面上的评论,其中提供了一些额外的提示。
答案3
尝试以下命令并检查它们是否显示任何可用于解决问题的内容
更多 /var/log/maillog mailq
答案4
sendmail_path
我刚刚尝试了php.ini 中取消注释的代码:
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = sendmail -t -i
还要检查您的垃圾邮件文件夹。我将我的 Gmail 帐户放在“收件人”字段中,然后在垃圾邮件文件夹中找到了它 :)