Я пытаюсь отправить электронное письмо через SMTP-сервер GMail со страницы PHP, но получаю такую ошибку:
ошибка аутентификации [SMTP: SMTP-сервер не поддерживает аутентификацию (код: 250, ответ: mx.google.com, [98.117.99.235] SIZE 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES PIPELINING)]
Кто-нибудь может помочь? Вот мой код:
<?php
require_once "Mail.php";
$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <ramona@microsoft.com>";
$subject = "Привет!";
$body = "Привет,\n\nКак твои дела?";
$host = "smtp.gmail.com";
$port = "587";
$username= "testtest@gmail.com";
$password= "testtest";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>".$mail->getMessage()."</p>");
} else {
echo("<p>Сообщение отправлено успешно!</p>");
}
?>
Ответ 1
// Pear Mail Library
require_once "Mail.php";
$from = '<fromaddress@gmail.com>';
$to = '<toaddress@yahoo.com>';
$subject = 'Привет!';
$body = "Привет,\n\nКак твои дела?";
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject
);
$smtp = Mail::factory('smtp', array(
'host' => 'ssl://smtp.gmail.com',
'port' => '465',
'auth' => true,
'username' => 'johndoe@gmail.com',
'password' => 'passwordxxx'
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo('<p>'.$mail->getMessage().'</p>');
} else {
echo('<p>Сообщение отправлено успешно!</p>');
}
Ответ 2
Используя почтовую программу Swift, довольно легко отправить письмо с учетными данными Gmail:
<?php
require_once 'swift/lib/swift_required.php';
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl")
->setUsername('GMAIL_USERNAME')
->setPassword('GMAIL_PASSWORD');
$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance('Test Subject')
->setFrom(array('abc@example.com' => 'ABC'))
->setTo(array('xyz@test.com'))
->setBody('This is a test mail.');
$result = $mailer->send($message);
?>
Ответ 3
Я не рекомендую Pear Mail. Не обновлялся с 2010 года. Также читайте исходные файлы; исходный код устарел, написан в стиле PHP 4, и было обнаружено много ошибок/багов (Google it). Я использую Swift Mailer.
Swift Mailer интегрируется в любое веб-приложение, написанное на PHP 5, предлагая гибкий и элегантный объектно-ориентированный подход к отправке электронных писем с множеством функций:
Отправляет электронные письма, используя SMTP, sendmail, postfix или собственную реализацию транспорта.
Серверы поддержки, требующие имени пользователя и пароля и/или шифрования.
Защита от атак путем внедрения заголовка без удаления содержимого данных запроса.
Отправляет MIME-совместимые HTML/многостраничные электронные письма.
Использует плагины, управляемые событиями, для настройки библиотеки.
Обрабатывает большие вложения и встроенные изображения с низким потреблением памяти.
Это бесплатный и открытый исходный код, который вы можете загрузить на свой сервер.
Рабочий пример Gmail SSL/SMTP и Swift Mailer находятся здесь:
// Swift Mailer Library
require_once '../path/to/lib/swift_required.php';
// Почтовый транспорт
$transport = Swift_SmtpTransport::newInstance('ssl://smtp.gmail.com', 465)
->setUsername('username@gmail.com') // Логин ->setPassword('my_secure_gmail_password'); // Пароль
$mailer = Swift_Mailer::newInstance($transport);
// Создание сообщения
$message = Swift_Message::newInstance('Wonderful Subject Here')
->setFrom(array('sender@example.com' => 'Sender Name'))
->setTo(array('receiver@example.com' => 'Receiver Name'))
->setBody('Это тестовое<strong>сообщение</strong>. Это текст в <h1>HTML</h1>.', 'text/html');
// Отправка
if ($mailer->send($message)) {
echo 'Почта успешно отправлена.';
} else {
echo 'Ошибка. Не корректная конфигурация.:(';
}
Web