Intereting Posts
Загрузка изображения на ошибку codeigniter с использованием crud Как использовать деревья выражений в PHP? Символы Unicode становятся вопросительными знаками после вставки в базу данных Последовательный порядок флажков Выбранный PHP Отображение сообщений «Подписчика» и личных сообщений пользователя Проводка массива на PHP с использованием ajax Как установить umask для php5-fpm на Debian? Самый простой способ определить, находится ли пользователь в сети? (PHP / MySQL) Что более эффективно, строковые функции PHP или регулярное выражение в PHP? переменные сеанса, потерянные между страницами или использующие одинаковые переменные Временные метки PHP и настройка часового пояса PHP: получите следующие 13 дат с даты? Как запретить прямой доступ к файлам в каталоге AJAX Как получить текущее имя страницы PHP Новичок имеет проблемы с загрузкой файла с помощью ASIHTTPRequest

Отправка HTML-сообщения через PEAR при использовании аутентификации SMTP возвращает ошибку

Я пытаюсь отправить сообщение HTML при использовании SMTP-аутентификации в Gmail на PHP. Вот сценарий, который я использую:

require_once "Mail.php"; require_once 'Mail/mime.php'; $from = "Some Name <myemail@gmail.com>"; $to = "Other Name <otheremail@gmail.com>"; $subject = "This is a test"; $crlf = "\n"; $host = "ssl://smtp.gmail.com"; $port = "465"; $username = "myemail@gmail.com"; $password = "mypass"; $headers = array ('From' => $from, 'Return-Path' => $from, 'Subject' => $subject); $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password)); $mime = new Mail_mime($crlf); $mime->setTXTBody("This is a test email message"); $mime->setHTMLBody($body); $body = $mime->get(); $headers = $mime->headers($headers); $mail = $smtp->send($to, $headers, $body); if (PEAR::isError($mail)) { echo("<p>" . $mail->getMessage() . "</p>"); } else { echo("<p>Message successfully sent!</p>"); } 

Примечание. $body – это таблица HTML с изображениями и другой информацией.

Когда я выполняю сценарий, он терпит неудачу со следующей ошибкой:

Не удалось установить отправителя: Некоторое имя [SMTP: неверный код ответа, полученный от сервера (код: 555, ответ: 5.5.2 Синтаксическая ошибка. C6sm20541406obd.22)]

Вот что я пытался понять, что происходит не так: 1. Используя тот же скрипт, используя «Mail» вместо «smtp», т.е.

 $smtp = Mail::factory('Mail'); 

Это прекрасно работает. 2. Используя тот же скрипт без mime.php , это также работает, но не позволяет отправлять HTML-письмо.

Кто-нибудь знает, как я могу объединить эти два, чтобы я все еще использовал аутентификацию SMTP и отправлял сообщение HTML?

EDIT: Здесь дамп $mime->headers() :

 [MIME-Version] => 1.0 [From] => Some Name [Return-Path] => Some Name [Subject] => This is a test [Content-Type] => multipart/alternative; boundary="=_8662996a1f586248545d9f01f48e916d" 

Related of "Отправка HTML-сообщения через PEAR при использовании аутентификации SMTP возвращает ошибку"

См. Приведенный ниже URL. Я думаю, что это очень помогает вам.

Как отправить HTML-адрес электронной почты с помощью SMTP в PHP

Адрес SMTP-сервера Gmail – SMTP.GOOGLEMAIL.COM, а не SMTP.GMAIL.COM .

Поэтому ваши настройки должны быть:

 // ... $smtp=array(); $smtp['host']='ssl://smtp.googlemail.com'; 

См. Другой пример:

Отправить HTML и обычный текст электронной почты с использованием SMTP-сервера с PHP и PEAR

http://tonyvirelli.com/slider/php-html-email-using-smtp/

Попробуйте включить имена в двойные кавычки, например:

 $from = '"Some Name" <myemail@gmail.com>'; $to = '"Other Name" <otheremail@gmail.com>'; 

попробуйте и расскажите об этом.

Обновление :
Хорошо, выше не работает, поэтому я просто расскажу вам, что он работает для меня на моих php-страницах для отправки электронной почты через smtp gmail.

  • Я использую http://phpmailer.sourceforge.net/
  • сервер smtp установлен на smtp.gmail.com
  • он использует протокол TLS в порту 587

поэтому на основе этого вы можете попытаться изменить свой конфиг:

 $host = "tls://smtp.gmail.com"; $port = "587"; 

вы можете увидеть здесь, как отправлять почту через gmail с помощью phpmailer.

Выяснил это сам наконец.

Спасибо Абиду Хусейну за предоставленную ссылку на пример здесь: http://tonyvirelli.com/slider/php-html-email-using-smtp/

Решение:

  1. Удалите 'Return-Path' => $from из массива заголовков.
  2. Добавить To => $to в массив заголовков (без этого заголовком полученного письма является Undisclosed recipients )

У меня была эта проблема, и с помощью отладки удалось получить всевозможные различные ошибки (см. Ниже). Самое странное, что он полностью прекратил работать около 11/2/2017. Я не делал никаких обновлений. Раньше это было бы случайным образом работать, поэтому я поставил повтор, и ему всегда удавалось <5 попыток, до второго. Странный.

 Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Invalid response code received from server (code: -1, response: )] fsockopen(): Failed to enable crypto fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed 

(и так далее)

В другом случае мы использовали этот шаг по устранению неполадок, который помог мне получить больше ошибок, чтобы я мог больше Google объяснить, что может быть причиной:

 $result = fsockopen('ssl://smtp.gmail.com', 465, $error_no, $error_message, 5); if($result === false) { echo "error no: $error_no error message: $error_message"; echo print_r($result,true); }else{ echo 'success\n\n'; } 

Мое исправление заключалось в том, чтобы добавить файл с пакетом CA, поскольку в PHP не удалось проверить сертификат Google:

  • Загрузите пакет CA https://curl.haxx.se/docs/caextract.html и извлеките его в C: \ Program Files \ PHP \ ssl \ cacert.pem
  • Укажите местоположение в php.ini: openssl.cafile = C: \ Program Files \ PHP \ ssl \ cacert.pem