如何使用PHP PEAR mail和Exchange Server 2016发送电子邮件
我需要使用PEAR邮件和经过身份验证的广告用户通过PHP的Exchange Server 2016发送SMTP电子邮件。我在网上找到了一个例子:如何使用PHP PEAR mail和Exchange Server 2016发送电子邮件,php,email,exchange-server,pear-mail,Php,Email,Exchange Server,Pear Mail,我需要使用PEAR邮件和经过身份验证的广告用户通过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@gmai
<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>
由于C#代码工作正常,Exchange服务器配置正确,但PEAR邮件无法进行身份验证
我应该如何配置PEAR邮件和/或Exchange,使其能够工作?匿名SMTP电子邮件发送不是此环境中的选项
更新:在BastianW的评论之后,我成功地启用了AUTH登录,现在出现了一个不同的错误:
调试:Recv:220 mail.mydomain.com Microsoft ESMTP邮件服务于2017年8月3日星期四15:33:14+0200准备就绪
调试:发送:EHLO localhost
调试:Recv:250-mail.mydomain.com你好
调试:Recv:250-尺寸37748736
调试:Recv:250-流水线
调试:Recv:250-DSN
调试:Recv:250-EnhancedStatus代码
调试:Recv:250-STARTTLS
调试:Recv:250-AUTH登录
调试:Recv:250-8BITMIME
调试:Recv:250-BINARYMIME
调试:Recv:250分块
调试:发送:身份验证登录
调试:Recv:334 VXNlcm5hbWU6
调试:发送:cgxcuhjlcgf5llbsyxmb3jt
调试:Recv:334 UGFzc3dvcmQ6
调试:发送:OTAjMDNiUjFaaGM2SjRU
调试:Recv:235 2.7.0身份验证成功
调试:发送:邮件发件人:
调试:Recv:250 2.1.0发送器正常
调试:发送:RSET
调试:Recv:250 2.0.0重置
调试:发送:退出
为什么PEAR mail会发送RSET,并在收到“发件人确定”时关闭连接?您的MS Exchange服务器似乎没有正确配置,如上面的答复所示:
authentication failure [SMTP: No supported authentication methods (code: 250, response: mail.mydomain.com Hello [192.168.30.254] SIZE 37748736 PIPELINING DSN ENHANCEDSTATUSCODES STARTTLS AUTH GSSAPI NTLM 8BITMIME BINARYMIME CHUNKING)]
因此,您可能希望调整配置并删除“仅在启动TLS后提供基本身份验证”的复选标记,该复选标记将提供普通的“身份验证登录”,而无需在此处执行startTLS
顺便说一句,C#代码正常工作而PHP代码不正常的原因可能是运行在MS Exchange服务器上的ssl证书不可信。我认为,当您在加入active directory域的PC上运行C#代码时,SMTP端口从Microsoft Exchange服务器使用的SSL根证书就在那里,但在运行PHP代码的服务器(Linux?)上,根证书就不在那里了。下面是一个您可以用来进行故障排除的示例
您还可能希望尝试以下操作:
$smtp = Mail::factory('smtp', array (
'host' => "mail.mydomain.com",
'port' => 587,
'auth' => plain,
'socket_options' => array('ssl' => array('verify_peer_name' => false)),
'username' => "activeDirectoryDomain\\sender",
'password' => "password"
));
如前所述。看起来您的MS Exchange服务器没有正确配置,如您在上面的答复中所示:
authentication failure [SMTP: No supported authentication methods (code: 250, response: mail.mydomain.com Hello [192.168.30.254] SIZE 37748736 PIPELINING DSN ENHANCEDSTATUSCODES STARTTLS AUTH GSSAPI NTLM 8BITMIME BINARYMIME CHUNKING)]
因此,您可能希望调整配置并删除“仅在启动TLS后提供基本身份验证”的复选标记,该复选标记将提供普通的“身份验证登录”,而无需在此处执行startTLS
顺便说一句,C#代码正常工作而PHP代码不正常的原因可能是运行在MS Exchange服务器上的ssl证书不可信。我认为,当您在加入active directory域的PC上运行C#代码时,SMTP端口从Microsoft Exchange服务器使用的SSL根证书就在那里,但在运行PHP代码的服务器(Linux?)上,根证书就不在那里了。下面是一个您可以用来进行故障排除的示例
您还可能希望尝试以下操作:
$smtp = Mail::factory('smtp', array (
'host' => "mail.mydomain.com",
'port' => 587,
'auth' => plain,
'socket_options' => array('ssl' => array('verify_peer_name' => false)),
'username' => "activeDirectoryDomain\\sender",
'password' => "password"
));
如前所述。谢谢你的提示。我成功地启用了“Auth Login”,现在我又前进了一步(见更新的问题)。SSL证书是由官方CA(不是windows域CA)提供的受信任证书。感谢您的提示。我成功地启用了“Auth Login”,现在我又前进了一步(见更新的问题)。SSL证书是由官方CA(而不是windows域CA)提供的受信任证书。