我尝试通过phpmailer发送电子邮件,这是我的代码:
$mail = new PHPMailer;
$mail->isSendmail();
$mail->setFrom('from@example.com', 'First Last');
$mail->addAddress('whoto@example.com', 'John Doe');
$mail->Subject = 'PHPMailer sendmail test';
$mail->AltBody= 'This is a plain-text message body';
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
我收到了这个错误:
无法执行:/ usr / sbin / sendmail -t -i
为什么我会收到此错误以及电子邮件未发送的原因?
我也联系了公司,他们告诉我sendmail是活跃的,他们甚至为我重启了apache但我仍然得到同样的错误。他们告诉我,我应该设置一个主机mail.mydomain.ro才能工作,但在phpmailer示例中我没有任何主机可以设置。
更新: 如果我尝试使用SMTP,我会收到此错误:
2017-01-25 19:56:44 SERVER -> CLIENT: 220-prime.mycompany.ro ESMTP Exim 4.87 #1 Wed, 25 Jan 2017 21:56:44 +0200
220-We do not authorize the use of this system to transport unsolicited,220 and/or bulk e-mail.
2017-01-25 19:56:44 CLIENT -> SERVER: EHLO www.mywebsite.ro
2017-01-25 19:56:44 SERVER -> CLIENT: 250-prime.mycompany.ro Hello www.mywebsite.ro [some ip]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP
2017-01-25 19:56:44 CLIENT -> SERVER: STARTTLS
2017-01-25 19:56:44 SERVER -> CLIENT: 220 TLS go ahead
2017-01-25 19:56:44 SMTP Error: Could not connect to SMTP host.
2017-01-25 19:56:44 CLIENT -> SERVER: QUIT
2017-01-25 19:56:44 SERVER -> CLIENT: 221 prime.mycompany.ro closing connection
2017-01-25 19:56:44 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
答案 0 :(得分:3)
你为什么要使用isSendmail()
?如果您有一个奇怪的,自定义的sendmail仿真需要对mail()
提供的更多控制,那么您应该只需要它;它主要出现在历史原因之后,当时更常见(PHPMailer自2001年以来一直存在!)。
如果您什么都不做,PHPMailer默认使用PHP的内置mail()
功能。但是,我建议您避免这种情况并使用isSMTP()
- 它更可靠,更快速,更安全,并提供更好的发送反馈。如果mail()
有效,那么它应该涉及的是:
$mail->isSMTP();
$mail->Host = 'localhost';
使用默认值保留其他所有内容应该没问题。这比定制sendmail配置要轻松得多。
此外,您没有通过设置Body
来帮助自己 - 这可能是导致错误的原因。如果要发送纯文本消息,请执行以下操作:
$mail->isHTML(false);
$mail->Body = 'Hello';
答案 1 :(得分:0)
您可以通过以下方式解决问题: