Debian无法从PHP发送邮件

时间:2014-01-13 18:41:09

标签: php debian phpmailer

  

邮件程序错误:无法执行:/ usr / sbin / sendmail

我正在使用debian服务器,文件权限是777(全部都有),所以我无法执行它为什么会这样?

//Create a new PHPMailer instance
$mail = new PHPMailer();
// Set PHPMailer to use the sendmail transport
$mail->isSendmail();
//Set who the message is to be sent from
$mail->setFrom('admin@test.com', 'test');
//Set an alternative reply-to address
//$mail->addReplyTo('replyto@example.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress($_POST['email'], $_POST['name']);
//Set the subject line
$mail->Subject = 'PHPMailer sendmail test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML("from test");
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
//$mail->addAttachment('images/phpmailer_mini.gif');

//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}

2 个答案:

答案 0 :(得分:8)

默认情况下,未安装Ubuntu sendmail。您必须手动安装它:

sudo apt-get install sendmail-bin

如果安装了它,可能要做的是检查/usr/sbin/sendmail符号链接上的属性,并确保它至少对系统上的所有用户都是可执行的:

chmod 755 /usr/sbin/sendmail
  • 注意:默认情况下,属性设置为 777 rwxrwxrwx )。至少在Ubuntu和CentOS上。

编辑1:

如果您使用的是PHPMailer,可以使用以下方式设置Sendmail路径:

$mail->Sendmail     = '/usr/sbin/sendmail';

很容易测试PHP代码或邮件服务器配置中的问题,甚至可能是防火墙。尝试从命令行运行,看看是否收到了您的电子邮件:

/usr/sbin/sendmail -v my@address.com < email.test

此外,您实际上可以收到邮件,但可以将其放入垃圾邮件文件夹中,因此也请检查邮件。

编辑2:

还有一件事是您应该安装sendmailconfig然后运行它来配置它:

sudo sendmailconfig

详细了解如何在Ubuntu上配置sendmailsendmail: how to configure sendmail on ubuntu?

答案 1 :(得分:1)

直接问题似乎是您的系统上没有安装/usr/sbin/sendmail。有多个MTA提供此功能,因此不需要安装Sendmail套件;事实上,我建议反对它,支持Postfix或一些非常简单的MTA,如smtpdProvides: sendmail应该执行的任何包。

需要指出的另一个问题是chmod 777权限。你绝对不应该在生产系统上做任何世界上可写的东西。如果您可以信任该组,则PHP脚本的正确权限为755775httpd进程当然不需要能够写入脚本 - 实际上,绝对不应该允许向脚本文件写入任何内容。