PHP smtp.office365.com用于电子邮件
是否可以将PHP应用程序邮件与Office365集成 我已尝试,但发现此错误:PHP smtp.office365.com用于电子邮件,php,Php,是否可以将PHP应用程序邮件与Office365集成 我已尝试,但发现此错误: authentication failure [SMTP: SMTP server does not support authentication (code: 250, response: SINPR02CA025.outlook.office365.com Hello [17*.***.***.**] SIZE 78643200 PIPELINING DSN ENHANCEDSTATUSCODES STARTTL
authentication failure [SMTP: SMTP server does not support authentication (code: 250, response: SINPR02CA025.outlook.office365.com Hello [17*.***.***.**] SIZE 78643200 PIPELINING DSN ENHANCEDSTATUSCODES STARTTLS 8BITMIME BINARYMIME CHUNKING)]
到目前为止,我的PHP代码是:
$host = "smtp.office365.com";
$username = "me@company.com";
$password = "example";
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject,
'Content-Type' => 'text/html; charset=UTF-8'
);
$recipients = $to.", ".$bcc;
$smtp = Mail::factory('smtp',
array ('host' => $host,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($recipients, $headers, $body);
几点:
- 表单
的电子邮件服务器名称是旧的 标准的,虽然它们暂时仍然有效,但是 被通用的pod######.outlook.com
取代。只是谷歌 “office365 smtp设置”,您将看到有关此设置的良好文档smtp.office365.com
- 您需要根据您可以找到的文档指定
从项目1开始。正如S.Varun所说端口587
- 虽然我还没看过你的 我怀疑您的问题在于缺少SSL传输 正在加载。我将描述的修复基于FreeBSD,但您 应该能够改变它在Windows上工作(如果知道 您的环境):
- 创建包含以下借用代码的PHP文件:
$xportlist=stream_get_transports(); 打印($xportlist)代码>
- 当您在PHP中执行这个文件时(需要PHP的命令行界面),如果您没有看到任何关于SSL的提及,那么这就是您的问题——没有安全传输
- 安装PHP SSL模块(我使用FreeBSD中的端口,因此我转到
并执行security/php55 openssl
)make Install clean
- 重新启动Apache以确保加载新模块(理想情况下是优雅地重新启动)
- 现在重新运行get_transports PHP代码,您应该会看到列出的SSL(除了原始协议之外,我还得到了SSL、SSLv3、SSLv2、TLS)
- 现在尝试你的电子邮件发送代码,它应该工作
希望这有帮助 假设您已经安装了pear(如果您不在谷歌上搜索如何为您的特定操作系统安装),这段代码在Ubuntu 12.04 LTS中非常适合我 如果您得到“Mail.php”的“未找到文件”,则需要更改pear安装目录的位置 从命令行发出这个命令,找到out->pear config get php_dir。一旦知道了,在php.ini中编辑include_路径 不要忘记在linux中使用a:如果需要分隔多个包含,请使用a;如果您使用windows php服务器分隔多个包含。例如,对于linux:include_path=“.:/usr/share/php5:/usr/share/php”
尝试添加端口号或使用php mailerI不认为正确的地址是smtp.office365.com
事实上,上次我这么做时,我不得不联系微软,他们建议它是podxxxxx.outlook.com
。有没有任何例子?使用Pear的Mail.php这个答案导致了我的解决方案。我只是不得不取消注释“extension=php_openssl.dll“行在我的ini中,因为openssl显然已经安装。对于我来说,在2020年,主机被设置为“smtp.office365.com”。自2018年10月起,您的stream_get_transports应至少列出tls_v1.2。请参见此处了解详细信息:同时确保您的PEAR安装足够新,即它包含Auth/SASL.php文件。
<?php
require_once('/usr/share/php/Mail.php');
$from = "John Smith <john@youroffice365emailhere.com>";
$to = "Nancy Smith <Nancy@youroffice365emailhere.com>";
$bcc = '';
$subject = "Hi!";
$body = "Hi,\n\nLooks like it worked.";
$host = 'smtp.office365.com';
$port = '587';
$username = 'Your Auth Username here.'; ##e.g. test@yourdomain.com you do not need on.microsoft.com or anything here. Use your real email address you use for authentication.
$password = 'Your Auth Password for the email address above';
$headers = array(
'Port' => $port,
'From' => $from,
'To' => $to,
'Subject' => $subject,
'Content-Type' => 'text/html; charset=UTF-8'
);
$recipients = $to.", ".$bcc;
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($recipients, $headers, $body);
echo "test";
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>