Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP PEAR mail和Exchange Server 2016发送电子邮件_Php_Email_Exchange Server_Pear Mail - Fatal编程技术网

如何使用PHP PEAR mail和Exchange Server 2016发送电子邮件

如何使用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

我需要使用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@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)提供的受信任证书。