Настройки smtp популярных почтовых систем:
Для использования почтового ящика, который создан на домене, необходимо изменить MX-сервера в записях DNS, на записи выбранной почтовой системы.
Bitrix
Для отправки писем с сайта необходимо установить дополнительные плагины. Найти их возможно в каталоге решений. В каталоге присутствуют как платные, так и бесплатные модули, например данный плагин. Описание функционала, инструкции по установке, а также отзывы других пользователей доступны на странице конкретного модуля.
Имена полей в процессе настройки могут отличаться, но основные параметры, которые вам нужно использовать, следующие:
После сохранения изменений, произведите тестовую отправку письма.
Instant cms
В административной панели сайта перейдите в раздел “Настройки” и далее на вкладку “Почта”. В пункте “Почтовый транспорт” выберите “SMTP” и укажите следующие параметры:
После сохранения настроек произведите тестовую отправку по кнопке “Проверить настройки почты” слева вверху, чтобы убедиться, что все работает корректно.
Joomla!
В административной панели Joomla, перейти в меню “Система”, далее “Общие настройки” и во вкладке “Сервер” найдите блок “Настройка почты”:
После сохранения изменений, произведите тестовую отправку письма.
Modx revolution
Эта CMS имеет необходимые внутренние инструменты. В административной панели наведите курсор на значок шестеренки справа вверху и откройте раздел “Системные настройки”. В поле “Фильтр по разделу” выберите “Почта”. И укажите следующие параметры:
После сохранения изменений, произведите тестовую отправку письма.
Netcat
В административной панели перейдите в раздел “Настройки” – “Настройки системы”. В блоке “Вид транспорта” выберите “Использовать SMTP” и укажите следующие параметры:
После сохранения изменений, произведите тестовую отправку письма.
Opencart
В административной панели перейдите в раздел “Система” – “Настройки”. Нажмите на кнопку “Редактировать” у магазина и откройте вкладку “Почта”. В пункте “Почтовый протокол” выберите “SMTP” и укажите следующие параметры:
Prestashop
В административной в блоке “Настроить” выберите “Расширенные параметры” – “E-mail”. Отметьте пункт “Задать свои параметры для SMTP сервера” и укажите следующие значения:
В блоке “Проверка конфигурации электронной почты” можно произвести тестовую отправку, для проверки корректности настроек.
Smtp с авторизацией по протоколу ssl. яндекс
При работе с почтальонами Яндекс ни чего не изменилось, но, при обращении к классу, требуется указывать ссылку на хост, работающий через SSL. Так же изменился номер порта: раньше был 25, теперь используется 465. Код отправки выглядит вот так:
require_once «SendMailSmtpClass.php»; // подключение класса
Класс net.mail.smtpclient
Имя | Описание | |
---|---|---|
AlternateViews | Возвращает коллекцию вложений, используемую для хранения альтернативных форм тела сообщения. | |
ClientCertificates | Указывает, какие сертификаты следует использовать для установки SSL-подключения. | |
Credentials | Возвращает или задает учетные данные, используемые для проверки подлинности отправителя. | |
DeliveryFormat | Получает или задает формат доставки, используемый SmtpClient для отправки электронной почты. | |
DeliveryMethod | Указывает, как будут обрабатываться исходящие сообщения электронной почты. | |
EnableSsl | Указывает, использует ли SmtpClient протокол SSL для шифрования подключения. | |
Host | Возвращает или задает имя или IP-адрес хоста, используемого для SMTP-транзакций. | |
PickupDirectoryLocation | Возвращает или задает папку, в которой приложения сохраняют почтовые сообщения для обработки локальным SMTP-сервером. | |
Port | Возвращает или задает порт, используемый для SMTP-транзакций. | |
ServicePoint | Возвращает сетевое подключение, используемое для передачи сообщения электронной почты. | |
TargetName | Получает или задает имя поставщика услуг (SPN) для проверки подлинности при использовании расширенной защиты. | |
Timeout | Возвращает или задает значение, указывающее промежуток времени, после которого для синхронного вызова Send истечет время тайм-аута. | |
UseDefaultCredentials | Возвращает или задает значение Boolean, которое управляет отправкой учетных данных DefaultCredentials вместе с запросами. |
Имя | Описание | |
---|---|---|
Dispose() | Отправляет сообщение QUIT на SMTP-сервер, правильно завершает TCP-подключение и освобождает все ресурсы, используемые текущим экземпляром класса SmtpClient. | |
Dispose(Boolean) | Отправляет сообщение QUIT на SMTP-сервер, правильно завершает TCP-подключение и освобождает все ресурсы, используемые текущим экземпляром класса SmtpClient, и при необходимости освобождает управляемые ресурсы. | |
Equals(Object) | Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.) | |
Finalize | Позволяет объекту попытаться освободить ресурсы и выполнить другие операции по очистке перед тем, как объект будет утилизирован сборщиком мусора. (Унаследовано от Object.) | |
GetHashCode | Играет роль хэш-функции для определённого типа. (Унаследовано от Object.) | |
GetType | Возвращает объект класса Type для текущего экземпляра. (Унаследовано от Object.) | |
MemberwiseClone | Создает “поверхностную” копию текущего объекта. (Унаследовано от Object.) | |
OnSendCompleted | Создает событие SendCompleted. | |
Send(MailMessage) | Отправляет указанное сообщение на сервер SMTP для доставки. | |
Send(String, String, String, String) | Отправляет указанное сообщение электронной почты на сервер SMTP для доставки. Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String. | |
SendAsync(MailMessage, Object) | Отправляет указанное сообщение электронной почты на сервер SMTP для доставки. Этот метод не блокирует вызывающий поток и позволяет вызывающей стороне передать объект в метод, вызванный после завершения операции. | |
SendAsync(String, String, String, String, Object) | Отправляет сообщение электронной почты на сервер SMTP для доставки. Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String. Этот метод не блокирует вызывающий поток и позволяет вызывающей стороне передать объект в метод, вызванный после завершения операции. | |
SendAsyncCancel | Отменяет асинхронную операцию отправки сообщения электронной почты. | |
SendMailAsync(MailMessage) | Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции. | |
SendMailAsync(String, String, String, String) | Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции. . Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String. | |
ToString | Возвращает строковое представление текущего объекта. (Унаследовано от Object.) |
Класс system.net.mail.mailmessage
Имя | Описание | |
---|---|---|
AlternateViews | Возвращает коллекцию вложений, используемую для хранения альтернативных форм тела сообщения. | |
Attachments | Возвращает коллекцию вложений, используемую для хранения данных, вложенных в это сообщение электронной почты. | |
Bcc | Возвращает коллекцию адресов, содержащую получателей скрытой копии (BCC) данного сообщения электронной почты. | |
Body | Получает или задает основную часть сообщения. | |
BodyEncoding | Получает или задает кодировку, используемую для кодирования тела сообщения. | |
BodyTransferEncoding | Получает или задает кодирование передачи, используемое для кодирования тела сообщения. | |
CC | Возвращает коллекцию адресов, содержащую получателей копии (CC) данного сообщения электронной почты. | |
DeliveryNotificationOptions | Получает или задает уведомления о доставке данного сообщения электронной почты. | |
From | Получает или задает адрес отправителя данного сообщения электронной почты. | |
Headers | Возвращает заголовки электронной почты, передаваемые с данным сообщением. | |
HeadersEncoding | Получает или задает кодировку, используемую для пользовательских заголовков данного сообщения электронной почты. | |
IsBodyHtml | Получает или задает значение, показывающее, имеет ли основная часть почтового сообщения формат HTML. | |
Priority | Получает или задает приоритет данного сообщения электронной почты. | |
ReplyTo | Устаревшее. Получает или задает адрес ReplyTo для данного почтового сообщения. | |
ReplyToList | Получает или задает список адресов для ответа для данного сообщения электронной почты. | |
Sender | Получает или задает адрес отправителя данного сообщения электронной почты. | |
Subject | Получает или задает строку темы для данного сообщения электронной почты. | |
SubjectEncoding | Получает или задает кодировку, используемую для темы данного сообщения электронной почты. | |
To | Возвращает коллекцию адресов, содержащую получателей данного сообщения электронной почты. |
Настройка smtp на примере популярных cms:
Рассмотрим настройку SMTP на примере популярных CMS, в настройках мы будем использовать реквизиты нашей почтовой системы:
Немного о заголовках
Date:
— дата написания (отправки) письмаX-Mailer:
— почтовая программа, которая отправляла письмоX-Priority:
— приоритетFrom:
— от когоReply-To:
— куда писать ответ, при нажатии на кнопку ОТВЕТИТЬTo:
— комуSubject:
— тема
Отправка нескольких писем за одно соединение.
Если вы хотите отправить одно письмо многим адресатам, то вам достаточно использовать команду
RCPT TO
несколько раз подряд, указывая в ней email адреса, на которые хотите разослать письмо. После этого как и положено идет DATA и дальше письмо… И ваше письмо разошлется по всем указанным адресам.
Если хотите отправить несколько разных писем, разным адресатам, тогда делаем так:
Сначала идет все стандартно, соеденились, авторизовались, отправили письмо и после отправки письма посылаем команду не выход, а сброс
RSET
Эта команда сбрасывает все, что было введенно в текущем сеансе и после этого можно начинать формировать и отправлять следующее письмо.
Начинаем отправлять снова
MAIL FROM:
…….
RCPT TO:
……
и т.д.
То есть формируем с самого начала новое письмо…. После завершения отправки можно снова ввести
RSET
и сформировать третье письмо, четвертое и т.д.
Ну и в самом конце уже ставим
QUIT
Не много о заголовках.Date: – дата написания(отправки) письмаX-Mailer: – почтовая программа, которая отправляла письмоX-Priority: приоритетFrom: от когоReply-To: куда писать ответ, при нажатии на кнопку ОТВЕТИТЬTo: комуSubject: тема
В полях From, Reply-To, To можно указывать не только email, но и имя (Максим <[email protected]>).Вот только при написании имен русскими символами, придется их конвертировать=?windows-1251?Q?”.str_replace(” “,”_”,str_replace(“%”,”=”,urlencode(‘Максим’))).”?= <[email protected]>По такому же принципу кодируется и тема…
Отправка письма через telnet без авторизации:
Запускаем консоль (командную строку) и вводим последовательность команд для отправки письма:
Ниже копирую из консоли то, как я вводил команды и что получал в ответ (жирный шрифт – мои команды, курсив – ответы сервера):
Отправка через php
Дальше, сразу создадим необходимые заголовки. Привожу пример классических заголовков, на примере почтовика The bat.
Это письмо не будет отличаться от отправленного через этот почтовик.
Помогла статья? подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.
Прикрепление файлов к письму
На предыдущем примере вложим два файла. Для этого нужно внести поправку в заголовки. Заменяем вот эти два заголовка
Content-Type: multipart/mixed; boundary=”———-A4D921C2D10D7DB”
Этот заголовок означает, что в письме будут разные типы данных, и разделитель между этими данными будет “———-A4D921C2D10D7DB”.
Разделитель может быть любым, на ваше усмотрение, главное правило, чтобы разделитель (метка) начинался с “–” и чтобы такая последовательность символов не встречалась в тексте письма.
Файлы будут вставляться в тело письмо в перекодированном виде в base64. Подготовим две текстовые переменные, содержащие файлы в кодированном виде.
Обратите внимание, как читается и кодируется файл. Вместе с кодированием он разбивается на строки по 76 символов, чтобы не было длинной строки, так как длина строки в почтовом формате ограничена. Таким образом, можно вставить не только jpg, но и любой бинарный файл.
Итак, один файл готов к вложению и сейчас создадим еще один файл, текстовый. Текстовый файл необязательно читать с диска, можно создать его сразу из текста.
$code_file2 = base64_encode(“привет, это типа второй файл”);
Вот таким образом создали вторую текстовую переменную, которая содержит текстовые данные в base64. И теперь можно редактировать переменную $text, которая у нас является телом письма.
<?php
$text = "------------A4D921C2D10D7DB
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: 8bitпривет, это текст письма
------------A4D921C2D10D7DB
Content-Type: application/octet-stream; name="1.jpg"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="1.jpg"
"
.$code_file1."
------------A4D921C2D10D7DB
Content-Type: application/octet-stream; name="2.txt"Content-transfer-encoding: base64
Content-Disposition: attachment; filename="2.txt"
"
.$code_file2."
------------A4D921C2D10D7DB--
";
?>
Сначала ставим разделитель, указывая, что сейчас пойдет первая часть письма и после разделителя указываем какой тип данных будет использован.
Здесь указано, что сейчас пойдет обычный текст. Обязательно заголовки нужно отделить пустой строкой, пустая строка признак того, что заголовок кончился и пошло тело.
Когда надо начать вставлять вложения, нужно поставить разделитель(метку), это будет признаком, что одна часть кончилась и начинается следующая.
Вот поставлен разделитель, значит началась вторая часть. Так же надо указать какие данные будут в этой части.
Данные заголовки показывают, что сейчас пойдет кодированный в base64 файл с именем 1.jpg. После заголовков ставим пустую строку и вставляем кодированный текст $code_file1.
Когда вложения закончены, нужно завершить это тем же самым разделителем, только в конце должно быть “–“, это будет признаком окончания вложений.
Ну а дальше, как обычно, вставляем это все в отправку на сервер
fputs( $smtp_conn,$header.”rn”.$text.”rn.rn” );
Еще раз уточню, разделитель “————A4D921C2D10D7DB” я создал случайным образом, он может быть любой по вашему усмотрению, главное, он должен начинаться с “–” и не встречаться в самом письме.
А сейчас полные примеры без комментариев…
Отправка письма без вложений
<?php
function get_data($smtp_conn)
{
$data="";
while($str = fgets($smtp_conn,515)){
$data .= $str;
if(substr($str, 3, 1) == " ") break;}
return
$data;
}
$header="Date: ".date("D, j M Y G:i:s")." 0700rn";$header.="From: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('Максим')))."?= <[email protected]>rn";$header.="X-Mailer: The Bat! (v3.99.3) Professionalrn";
$header.="Reply-To: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('Максим')))."?= <[email protected]>rn";$header.="X-Priority: 3 (Normal)rn";
$header.="Message-ID: <172562218.".date("YmjHis")."@mail.ru>rn";$header.="To: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('Сергей')))."?= <[email protected]>rn";$header.="Subject: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('проверка')))."?=rn";$header.="MIME-Version: 1.0rn";
$header.="Content-Type: text/plain; charset=windows-1251rn";
$header.="Content-Transfer-Encoding: 8bitrn";
$text="привет, проверка связи.";
$smtp_conn = fsockopen("smtp.mail.ru", 25,$errno, $errstr, 10);if(!
$smtp_conn) {print "соединение с серверов не прошло"; fclose($smtp_conn); exit;}
$data = get_data($smtp_conn);fputs($smtp_conn,"EHLO mail.rurn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 250) {print "ошибка приветсвия EHLO"; fclose($smtp_conn); exit;}
fputs($smtp_conn,"AUTH LOGINrn");$code = substr(get_data($smtp_conn),0,3);
if($code != 334) {print "сервер не разрешил начать авторизацию"; fclose($smtp_conn); exit;}fputs($smtp_conn,base64_encode("login")."rn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 334) {print "ошибка доступа к такому юзеру"; fclose($smtp_conn); exit;}fputs($smtp_conn,base64_encode("password")."rn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 235) {print "не правильный пароль"; fclose($smtp_conn); exit;}
fputs($smtp_conn,"MAIL FROM:[email protected]");$code = substr(get_data($smtp_conn),0,3);
if($code != 250) {print "сервер отказал в команде MAIL FROM"; fclose($smtp_conn); exit;}fputs($smtp_conn,"RCPT TO:[email protected]");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 250 AND $code != 251) {print "Сервер не принял команду RCPT TO"; fclose($smtp_conn); exit;}fputs($smtp_conn,"DATArn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 354) {print "сервер не принял DATA"; fclose($smtp_conn); exit;}
fputs($smtp_conn,$header."rn".$text."rn.rn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 250) {print "ошибка отправки письма"; fclose($smtp_conn); exit;}
fputs($smtp_conn,"QUITrn");fclose($smtp_conn);
?>
Отправка письма с вложениями
<?php
function get_data($smtp_conn)
{
$data="";
while($str = fgets($smtp_conn,515)){
$data .= $str;
if(substr($str, 3, 1) == " ") { break; }}
return
$data;
}
$header="Date: ".date("D, j M Y G:i:s")." 0700rn";$header.="From: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('Максим')))."?= <[email protected]>rn";$header.="X-Mailer: The Bat! (v3.99.3) Professionalrn";
$header.="Reply-To: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('Максим')))."?= <[email protected]>rn";$header.="X-Priority: 3 (Normal)rn";
$header.="Message-ID: <172562218.".date("YmjHis")."@mail.ru>rn";$header.="To: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('Сергей')))."?= <[email protected]>rn";$header.="Subject: =?windows-1251?Q?".str_replace(" ","_",str_replace("%","=",urlencode('проверка')))."?=rn";$header.="MIME-Version: 1.0rn";
$header.="Content-Type: multipart/mixed; boundary="----------A4D921C2D10D7DB"rn";
$file="path/1.jpg";
$fp = fopen($file, "rb");$code_file1 = chunk_split(base64_encode(fread($fp, filesize($file))));
fclose($fp);$code_file2=base64_encode("привет, это типа второй файл");
$text="------------A4D921C2D10D7DB
Content-Type: text/plain; charset=windows-1251Content-Transfer-Encoding: 8bit
привет, это текст письма
------------A4D921C2D10D7DB
Content-Type: application/octet-stream; name="1.jpg"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="1.jpg"
"
.$code_file1."
------------A4D921C2D10D7DB
Content-Type: application/octet-stream; name="2.txt"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="2.txt""
.$code_file2."------------A4D921C2D10D7DB--
"
;
$smtp_conn = fsockopen("smtp.mail.ru", 25,$errno, $errstr, 10);if(!
$smtp_conn) {print "соединение с серверов не прошло"; fclose($smtp_conn); exit;}
$data = get_data($smtp_conn);fputs($smtp_conn,"EHLO mail.rurn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 250) {print "ошибка приветсвия EHLO"; fclose($smtp_conn); exit;}
fputs($smtp_conn,"AUTH LOGINrn");$code = substr(get_data($smtp_conn),0,3);
if($code != 334) {print "сервер не разрешил начать авторизацию"; fclose($smtp_conn); exit;}fputs($smtp_conn,base64_encode("login")."rn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 334) {print "ошибка доступа к такому юзеру"; fclose($smtp_conn); exit;}fputs($smtp_conn,base64_encode("password")."rn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 235) {print "не правильный пароль"; fclose($smtp_conn); exit;}
fputs($smtp_conn,"MAIL FROM:[email protected]");$code = substr(get_data($smtp_conn),0,3);
if($code != 250) {print "сервер отказал в команде MAIL FROM"; fclose($smtp_conn); exit;}fputs($smtp_conn,"RCPT TO:[email protected]");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 250 AND $code != 251) {print "Сервер не принял команду RCPT TO"; fclose($smtp_conn); exit;}fputs($smtp_conn,"DATArn");
$code = substr(get_data($smtp_conn),0,3);if(
$code != 354) {print "сервер не принял DATA"; fclose($smtp_conn); exit;}
fputs($smtp_conn,$header."rn".$text."rn.rn");
$code = <;/font>substr(get_data($smtp_conn),0,3);if(
$code != 250) {print "ошибка отправки письма"; fclose($smtp_conn); exit;}
fputs($smtp_conn,"QUITrn");fclose($smtp_conn);
?>