PHP smtp.office365.com用于电子邮件

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

是否可以将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 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
    的电子邮件服务器名称是旧的 标准的,虽然它们暂时仍然有效,但是 被通用的
    smtp.office365.com
    取代。只是谷歌 “office365 smtp设置”,您将看到有关此设置的良好文档
  • 您需要根据您可以找到的文档指定
    端口587
    从项目1开始。正如S.Varun所说
  • 虽然我还没看过你的 我怀疑您的问题在于缺少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>");
}
?>