PHP smtp.office365.com电子邮件

时间:2014-03-25 01:36:48

标签: 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 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);

2 个答案:

答案 0 :(得分:5)

有几点:

  • 表单pod####.outlook.com的电子邮件服务器名称是旧的 标准,虽然他们仍然暂时工作,但已经 被通用smtp.office365.com取代。只是谷歌 " office365 smtp设置"你会看到很好的文件。
  • 您需要根据您找到的文档指定port 587 来自第1项。正如S. Varun所述。
  • 虽然我没有审核你的 代码详细我怀疑你的问题是缺乏SSL传输 被装载。我将描述的修复程序基于FreeBSD,但是你 应该能够改变它在Windows上工作(将有助于了解 你的环境):

    1. 创建一个PHP文件,其中包含从PHP stream_get_transports() documentation借来的以下代码:

      $xportlist = stream_get_transports(); print_r($xportlist);

    2. 当您在PHP中执行此文件(需要PHP的命令行界面)时,如果您没有看到任何SSL提及,那么这就是您的问题 - 没有安全传输

    3. 安装PHP SSL模块(我在FreeBSD中使用端口,所以我转到security/php55-openssl并执行make install clean

    4. 重启Apache以确保加载新模块(理想情况下是正常重启)。

    5. 现在重新运行你的get_transports PHP代码,你应该看到SSL列出了(除了原始协议之外我还有SSL,SSLv3,SSLv2,TLS)

    6. 现在尝试使用您的电子邮件发送代码,它应该可以使用!

希望这有帮助!

答案 1 :(得分:1)

假设您已经安装了梨(如果您不想谷歌如何为您的特定操作系统安装),这段代码在Ubuntu 12.04 LTS中非常适合我。

如果你没有找到"" Mail.php"那么您需要更改pear安装目录所在的位置。

从命令行发出此信息以查找out - > pear config-get php_dir。一旦你知道在php.ini中编辑你的include_path。

不要在linux中忘记使用:如果你需要分开多个包含并使用一个;如果你使用Windows PHP服务器分开多个包含。例如for linux:include_path ="。:/ usr / share / php5:/ usr / share / 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,
 '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>");
}
?>