PHP smtp.office365.com для электронной почты

Возможно ли сделать почтовое приложение 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 серверов формы pod####.outlook.com являются старым стандартом и, пока они все еще работают, были заменены общим smtp.office365.com . Просто Google "office365 smtp настройки", и вы увидите хорошую документацию по этому вопросу.
  • Вам нужно будет указать port 587 на документацию, которую вы найдете из пункта 1. точно так же, как утверждает С. Варун.
  • Хотя я не рассматривал ваш код подробно, я подозреваю, что ваша проблема связана с отсутствием загружаемого транспорта SSL. Исправление, которое я опишу, основано на FreeBSD, но вы должны иметь возможность изменить его для работы в Windows (помогли бы узнать вашу среду):

    1. Создайте файл PHP, который содержит следующий код, заимствованный из документации PHP stream_get_transports() :

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

    2. Когда вы выполняете этот файл на PHP (требуется наличие интерфейса командной строки PHP), если вы не видите упоминания SSL, то это ваша проблема – нет безопасных транспортных средств

    3. Установите PHP-модуль SSL (я использую порты во FreeBSD, поэтому я security/php55-openssl к security/php55-openssl и делаю make install clean )

    4. Перезапустите Apache, чтобы убедиться, что новые модули загружены (в идеале – изящный перезапуск).

    5. Теперь заново запустите ваш PHP-код get_transports, и вы увидите список SSL (я получил SSL, SSLv3, SSLv2, TLS в дополнение к исходным протоколам)

    6. Теперь попробуйте код отправки электронной почты, и он должен работать!

Надеюсь это поможет!

Предполагая, что у вас уже установлена ​​груша (если вы не используете Google для установки в вашей конкретной операционной системе), этот код отлично работает для меня в Ubuntu 12.04 LTS.

Если вы получите «файл, не найденный для« Mail.php », тогда вам нужно изменить, где находится каталог установки груши.

Извлеките это из командной строки, чтобы узнать, что out -> pear config-get php_dir. Как только вы знаете, измените свой include_path в php.ini.

Не забудьте в linux использовать: если вам нужно отделить несколько включений и использовать; если вы используете Windows php server для разделения нескольких включений. например, для 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.'; ##eg 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>"); } ?>