我需要使用 PEAR 邮件和经过身份验证的 AD 用户在 PHP 中通过 Exchange Server 2016 发送 SMTP 电子邮件。我在网上找到了一个例子:
<html><body>
<?php
include('Mail.php');
$body = "Hi,\n\nHow are you?";
$headers = array (
'From' => "sender@mydomain.com",
'To' => "recipient@gmail.com",
'Subject' => "Hi from MailTest3.php!"
);
$smtp = Mail::factory('smtp', array (
'host' => "mail.mydomain.com",
'port' => 587,
'auth' => true,
'username' => "activeDirectoryDomain\\sender",
'password' => "password"
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>
</body></html>
当我运行它时,我收到以下错误:
身份验证失败 [SMTP:不支持身份验证方法(代码:250,响应:mail.mydomain.com Hello [192.168.30.254] SIZE 37748736 PIPELINING DSN ENHANCEDSTATUSCODES STARTTLS AUTH GSSAPI NTLM 8BITMIME BINARYMIME CHUNKING)]
同时,这个类似的 C# 应用程序运行良好,没有任何问题:
static void Main(string[] args)
{
var body = "Hi,\n\nHow are you?";
var msg = new MailMessage(
from: "sender@mydomain.com",
to: "recipient@gmail.com",
subject: "Hi from MailTest3.cs!",
body: body);
var smtp = new SmtpClient(
host: "mail.mydomain.com",
port: 587);
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(
userName: "activeDirectoryDomain\\sender",
password: "password");
try
{
smtp.Send(msg);
Console.WriteLine("Message successfully sent!");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
由于 C# 代码工作正常,Exchange Server 已正确配置,但 PEAR 邮件无法进行身份验证。
我应该如何配置 PEAR 邮件和/或 Exchange 才能正常工作?在这种环境中,匿名 SMTP 电子邮件发送不是一个选项。
更新:在 BastianW 发表评论后,我成功启用了 AUTH LOGIN,现在出现了一个不同的错误:
调试:接收:220 mail.mydomain.com Microsoft ESMTP MAIL 服务于 2017 年 8 月 3 日星期四 15:33:14 +0200 准备就绪
调试:发送:EHLO localhost
调试:接收:250-mail.mydomain.com 你好
调试:接收:250 大小 37748736
调试:接收:250-流水线
调试:接收:250-DSN
调试:接收:250-ENHANCEDSTATUSCODES
调试:接收:250-STARTTLS
调试:接收:250-AUTH 登录
调试:接收:250-8BITMIME
调试:接收:250-BINARYMIME
调试:接收:250 块
调试:发送:授权登录
调试:接收:334 VXNlcm5hbWU6
调试:发送:cGxcUHJlcGF5LlBsYXRmb3Jt
调试:接收:334 UGFzc3dvcmQ6
调试:发送:OTAjMDNiUjFaaGM2SjRU
调试:接收:235 2.7.0 身份验证成功
调试:发送:邮件来自:
调试:接收:250 2.1.0 发件人确定
调试:发送:RSET
调试:接收:250 2.0.0 重置
调试:发送:退出
为什么 PEAR 邮件在收到“Sender OK”时会发送关闭连接的 RSET?