Php smtp mail ssl

Отправка email через SMTP с авторизацией по протоколу SSL на php

При работе с почтальонами Яндекс ни чего не изменилось, но, при обращении к классу, требуется указывать ссылку на хост, работающий через SSL. Так же изменился номер порта: раньше был 25, теперь используется 465. Код отправки выглядит вот так:

require_once «SendMailSmtpClass.php»; // подключение класса

$mailSMTP = new SendMailSmtpClass(‘test@yandex.ru’, ‘****’, ‘ssl://smtp.yandex.ru’, ‘test’, 465);
// $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’);

// заголовок письма
$headers= «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»; // кодировка письма
$headers .= «From: test \r\n»; // от кого письмо
$result = $mailSMTP->send(‘test@yandex.ru’, ‘Тема письма’, ‘Текст письма’, $headers); // отправляем письмо
// $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’);
if($result === true) echo «Письмо успешно отправлено»;
>else echo «Письмо не отправлено. Ошибка: » . $result;
>

SMTP с авторизацией по протоколу SSL. Майл

При работе с сервером Mail.ru данный класс тоже подходит. Требуется указать ссылку на хост с ssl и обратиться к порту 465.
Но для полноты корректности работы с Mail.ru в headare письма необходимо указывать отправителя, того же с адреса которого происходит авторизация на сервере или его не указывать вовсе.
Код отправки письма для Mail.ru выглядит вот так:

Читайте также:  What is infix in kotlin

// пример использования
require_once «SendMailSmtpClass.php»; // подключаем класс

$mailSMTP = new SendMailSmtpClass(test@mail.ru’, ‘****’, ‘ssl://smtp.mail.ru’, ‘test’, 465); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’);

// заголовок письма
$headers= «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»; // кодировка письма
$headers .= «From: test \r\n»; // от кого письмо . тут e-mail, через который происходит авторизация
$result = $mailSMTP->send(‘test@yandex.ru’, ‘Тема письма’, ‘Текст письма’, $headers); // отправляем письмо
// $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’);
if($result === true) echo «Письмо успешно отправлено»;
>else echo «Письмо не отправлено. Ошибка: » . $result;
>

SMTP с авторизацией по протоколу SSL. Gmail

Для работы с почтовым сервером gmail.com, необходимо указывать ссылку на хост, работающий через SSL и номер порта 465. Выглядит код отправки теперь вот так:

// пример использования
require_once «SendMailSmtpClass.php»; // подключаем класс

$mailSMTP = new SendMailSmtpClass(‘test@gmail.com’, ‘*****’, ‘ssl://smtp.gmail.com’, ‘test’, 465); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’);

// заголовок письма
$headers= «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»; // кодировка письма
$headers .= «From: test \r\n»; // от кого письмо
$result = $mailSMTP->send(‘test@yandex.ru’, ‘gmail’, ‘Текст письма’, $headers); // отправляем письмо
// $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’);
if($result === true) echo «Письмо успешно отправлено»;
>else echo «Письмо не отправлено. Ошибка: » . $result;
>
Дополнения

Можно так же расширить возможности класса и добавить отправку письма сразу нескольким получателям.
Для этого через «,» заменить
Это:

fputs($socket, «RCPT TO: \r\n»);
if (!$this->_parseServer($socket, «250»)) fclose($socket);
throw new Exception(‘Error of command sending: RCPT TO’);
>
На это:

$email_to_array = explode(‘,’, $mailTo);
foreach($email_to_array as $key => $email) $email = ltrim($email, »);
fputs($socket, «RCPT TO: \r\n»);
if (!$this->_parseServer($socket, «250»)) fclose($socket);
throw new Exception(‘Error of command sending: RCPT TO’);
>
>
Если в теле сообщения не корректный текст то проверяем кодировку.

$from_user=iconv(«windows-1251», «utf-8» ,$from_user);
$subject =iconv(«windows-1251», «utf-8» , $subject);
$message =iconv(«windows-1251», «utf-8» , $message);

Так же дополнением можно отправлять и файлы, вот таким кодом:

// пример использования
require_once «SendMailSmtpClass.php»; // подключаем класс

$mailSMTP = new SendMailSmtpClass(‘xxx@mail.ru’, ‘xxx’, ‘ssl://smtp.mail.ru’, ‘test’, 465); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’);

// заголовок письма
$headers= «MIME-Version: 1.0\r\n»;
//$headers .= «Content-type: text/html; charset=utf-8\r\n»; // кодировка письма
//$headers .= «From: test \r\n»; // от кого письмо . тут e-mail, через который происходит авторизация

$subject = «пробуем отправить файл»;
$message =»Сообщение в теле письма при отправке файла»; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п.
$filename = «имя файла например формата.zip»; // название файла
$filepath = «./sending/полный путь к файлу.zip»; // месторасположение файла
//исьмо с вложением состоит из нескольких частей, которые разделяются разделителем
$boundary = «—-«.md5(uniqid(time())); // генерируем разделитель
$headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\»\r\n»; // кодировка письма// разделитель указывается в заголовке в параметре boundary
$headers .= «From: NameSender \r\n»;
$multipart = «—$boundary\r\n»;
$multipart .= «Content-Type: text/html; charset=windows-1251\r\n»;
$multipart .= «Content-Transfer-Encoding: base64\r\n»;
$multipart .= «\r\n»;
$multipart .= chunk_split(base64_encode(iconv(«utf8», «windows-1251″, $message))); // первая часть само сообщение
// Открыли файл
$fp = fopen($filepath,»r»);
if (!$fp)
print «Не удается открыть файл22»;
exit();
>
$file = fread($fp, filesize($filepath)); // чтение файла
fclose($fp);
$message_part = «\r\n—$boundary\r\n»;
$message_part .= «Content-Type: application/zip; name=\»$filename\»\r\n»;
$message_part .= «Content-Disposition: attachment\r\n»;
$message_part .= «Content-Transfer-Encoding: base64\r\n»;
$message_part .= «\r\n»;
$message_part .= chunk_split(base64_encode($file));
$message_part .= «\r\n—$boundary—\r\n»; // второй частью прикрепляем файл, можно прикрепить два и более файла
$multipart .= $message_part;

$result = $mailSMTP->send(‘xxx@xxx.ru’, $subject, $multipart, $headers); // отправляем письмо
// $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’);
if($result === true) echo «Письмо успешно отправлено»;
>else echo «Письмо не отправлено. Ошибка: » . $result;
>

Источник

Отправка почты через SMTP с помощью PHP

Отправка почты через SMTP с помощью PHP на картинке

Здравствуйте дорогие читатели. В этой записи я расскажу Вам как отправить письмо с вашего сайта через SMTP сервер. Перед тем, как отправлять письма через SMTP необходимо обязательно настроить DMARC, DKIM, SPF. Если не настроить, ваши письма будут попадать в спам, но нам этого не нужно. Статья — Как настроить DMARC, SPF, DKIM подпись на своем сайте.

Готовый класс — PHP

Для начала загрузите готовый класс, по ссылке — SendMailSmtpClass.php.zip

Распаковываем архив, и размещаем в любую директорию на Вашем сайте.

Настройка класса

Настройка очень простая. Разместите этот код на странице, которая присутствует на каждой. Обычно это — страница конфига.

require_once "SendMailSmtpClass.php"; // подключаем класс //ДЛЯ YANDEX.RU $mailSMTP = new SendMailSmtpClass('mail@yandex.ru', 'pass', 'ssl://smtp.yandex.ru', 465, "UTF-8"); //ДЛЯ MAIL.RU $mailSMTP = new SendMailSmtpClass('mail@mail.ru', 'pass', 'ssl://smtp.mail.ru', 465, "UTF-8"); //РАСШИФРОВКА ЗНАЧЕНИЙ $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'порт', 'кодировка письма');

Код отправки самого письма:

$from = array("Блог программиста", // Имя отправителя "support@212d.ru" // почта отправителя ); $result = $mailSMTP->send('Кому письмо, можно через , два получателя', 'Тема письма', 'Текст письма', $from); 

$result возвращает либо true — успешная отправка, либо false — ошибка.

Прикрепление файлов к письму

$mailSMTP->addFile("file1.jpg"); $mailSMTP->addFile("file2.jpg");

В итоге, если Вы все настроили правильно Ваше письмо будет отправляется через этот SMTP сервер с подписей DKIM, и не попадет в спам.

Пишите свои вопросы, предложения в комментариях помогу Всем!

Источник

Отправка писем через SMTP в PHPMailer

В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают в спам или совсем не доходят до адресатов. Альтернатива – это отправка e-mail через SMTP с реального почтового ящика.

use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require_once '/PHPMailer/src/Exception.php'; require_once '/PHPMailer/src/PHPMailer.php'; require_once '/PHPMailer/src/SMTP.php'; // Для более ранних версий PHPMailer //require_once '/PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->CharSet = 'UTF-8'; // Настройки SMTP $mail->isSMTP(); $mail->SMTPAuth = true; $mail->SMTPDebug = 0; $mail->Host = 'ssl://smtp.gmail.com'; $mail->Port = 465; $mail->Username = 'Логин'; $mail->Password = 'Пароль'; // От кого $mail->setFrom('mail@snipp.ru', 'Snipp.ru'); // Кому $mail->addAddress('mail@site.com', 'Иван Петров'); // Тема письма $mail->Subject = $subject; // Тело письма $body = '

«Hello, world!»

'; $mail->msgHTML($body); // Приложение $mail->addAttachment(__DIR__ . '/image.jpg'); $mail->send();

Если при отправки писем возникает ошибка « Could not connect to SMTP host », то необходимо добавить следующие строки:

$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );

Яндекс Почта

$mail->Host = 'ssl://smtp.yandex.ru'; $mail->Port = 465; $mail->Username = 'Логин@yandex.ru'; $mail->Password = 'Пароль';

В настройках почты нужно разрешить доступ к почтовому ящику с помощью почтовых клиентов:

Разрешить доступ к почтовому ящику с помощью почтовых клиентов в Яндекс почте

Mail.ru

$mail->Host = 'ssl://smtp.mail.ru'; $mail->Port = 465; $mail->Username = 'Логин@mail.ru'; $mail->Password = 'Пароль';

Gmail

$mail->Host = 'ssl://smtp.gmail.com'; $mail->Port = 465; $mail->Username = 'Логин@gmail.com'; $mail->Password = 'Пароль';

Если возникает ошибка при отправки почты, то нужно отключить двухфакторную авторизацию и разблокировать «ненадежные приложения» в настройках конфиденциальности аккаунта https://myaccount.google.com/security?pli=1

Отключить двухфакторную авторизацию Gmail

Разблокировать «ненадежные приложения» в настройках Gmail

Рамблер

$mail->Host = 'ssl://smtp.rambler.ru'; $mail->Port = 465; $mail->Username = 'Логин@rambler.ru'; $mail->Password = 'Пароль';

iCloud

$mail->Host = 'ssl://smtp.mail.me.com'; $mail->Port = 587; $mail->Username = 'Логин@icloud.com'; $mail->Password = 'Пароль';

Мастерхост

$mail->Host = 'ssl://smtp.masterhost.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Timeweb

$mail->Host = 'ssl://smtp.timeweb.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Хостинг Центр (hc.ru)

Доступ к сторонним почтовым серверам по SMTP-портам (25, 465, 587) ограничен, разрешена отправка не более 300 сообщений в сутки.

$mail->Host = 'smtp.домен.ru'; $mail->SMTPSecure = 'TLS'; $mail->Port = 25; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

REG.RU

$mail->Host = 'ssl://serverXXX.hosting.reg.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Имя сервера на reg.ru

Имя сервера на reg.ru

ДЖИНО

У jino.ru нужно включить опцию «SMTP-сервер»

$mail->Host = 'ssl://smtp.jino.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

nic.ru

$mail->Host = 'ssl://mail.nic.ru'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Бегет — beget.com

$mail->Host = 'ssl://smtp.beget.com'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Спринтхост — sprinthost.ru

$mail->Host = 'ssl://smtp.ВАШ_ДОМЕН'; $mail->Port = 465; $mail->Username = 'Логин@домен.ru'; $mail->Password = 'Пароль';

Источник

Оцените статью