Отправка почты через консоль с авторизацией в linux

Настройки 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

Свойства
 ИмяОписание
methodAlternateViewsВозвращает коллекцию вложений, используемую для хранения альтернативных форм тела сообщения.
methodClientCertificatesУказывает, какие сертификаты следует использовать для установки SSL-подключения.
methodCredentialsВозвращает или задает учетные данные, используемые для проверки подлинности отправителя.
methodDeliveryFormatПолучает или задает формат доставки, используемый SmtpClient для отправки электронной почты.
methodDeliveryMethodУказывает, как будут обрабатываться исходящие сообщения электронной почты.
methodEnableSslУказывает, использует ли SmtpClient протокол SSL для шифрования подключения.
methodHostВозвращает или задает имя или IP-адрес хоста, используемого для SMTP-транзакций.
methodPickupDirectoryLocationВозвращает или задает папку, в которой приложения сохраняют почтовые сообщения для обработки локальным SMTP-сервером.
methodPortВозвращает или задает порт, используемый для SMTP-транзакций.
methodServicePointВозвращает сетевое подключение, используемое для передачи сообщения электронной почты.
methodTargetNameПолучает или задает имя поставщика услуг (SPN) для проверки подлинности при использовании расширенной защиты.
methodTimeoutВозвращает или задает значение, указывающее промежуток времени, после которого для синхронного вызова Send истечет время тайм-аута.
methodUseDefaultCredentialsВозвращает или задает значение Boolean, которое управляет отправкой учетных данных DefaultCredentials вместе с запросами.
Методы
 ИмяОписание
methodDispose()Отправляет сообщение QUIT на SMTP-сервер, правильно завершает TCP-подключение и освобождает все ресурсы, используемые текущим экземпляром класса SmtpClient.
methodDispose(Boolean)Отправляет сообщение QUIT на SMTP-сервер, правильно завершает TCP-подключение и освобождает все ресурсы, используемые текущим экземпляром класса SmtpClient, и при необходимости освобождает управляемые ресурсы.
methodEquals(Object)Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.)
methodFinalizeПозволяет объекту попытаться освободить ресурсы и выполнить другие операции по очистке перед тем, как объект будет утилизирован сборщиком мусора. (Унаследовано от Object.)
methodGetHashCodeИграет роль хэш-функции для определённого типа. (Унаследовано от Object.)
methodGetTypeВозвращает объект класса Type для текущего экземпляра. (Унаследовано от Object.)
methodMemberwiseCloneСоздает “поверхностную” копию текущего объекта. (Унаследовано от Object.)
methodOnSendCompletedСоздает событие SendCompleted.
methodSend(MailMessage)Отправляет указанное сообщение на сервер SMTP для доставки.
methodSend(String, String, String, String)Отправляет указанное сообщение электронной почты на сервер SMTP для доставки. Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String.
methodSendAsync(MailMessage, Object)Отправляет указанное сообщение электронной почты на сервер SMTP для доставки. Этот метод не блокирует вызывающий поток и позволяет вызывающей стороне передать объект в метод, вызванный после завершения операции.
methodSendAsync(String, String, String, String, Object)Отправляет сообщение электронной почты на сервер SMTP для доставки. Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String. Этот метод не блокирует вызывающий поток и позволяет вызывающей стороне передать объект в метод, вызванный после завершения операции.
methodSendAsyncCancelОтменяет асинхронную операцию отправки сообщения электронной почты.
methodSendMailAsync(MailMessage)Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции.
methodSendMailAsync(String, String, String, String)Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции. . Отправитель, получатели, тема и основная часть сообщения указываются с помощью объектов String.
methodToStringВозвращает строковое представление текущего объекта. (Унаследовано от Object.)

Класс system.net.mail.mailmessage

Свойства
 ИмяОписание
methodAlternateViewsВозвращает коллекцию вложений, используемую для хранения альтернативных форм тела сообщения.
methodAttachmentsВозвращает коллекцию вложений, используемую для хранения данных, вложенных в это сообщение электронной почты.
methodBccВозвращает коллекцию адресов, содержащую получателей скрытой копии (BCC) данного сообщения электронной почты.
methodBodyПолучает или задает основную часть сообщения.
methodBodyEncodingПолучает или задает кодировку, используемую для кодирования тела сообщения.
methodBodyTransferEncodingПолучает или задает кодирование передачи, используемое для кодирования тела сообщения.
methodCCВозвращает коллекцию адресов, содержащую получателей копии (CC) данного сообщения электронной почты.
methodDeliveryNotificationOptionsПолучает или задает уведомления о доставке данного сообщения электронной почты.
methodFromПолучает или задает адрес отправителя данного сообщения электронной почты.
methodHeadersВозвращает заголовки электронной почты, передаваемые с данным сообщением.
methodHeadersEncodingПолучает или задает кодировку, используемую для пользовательских заголовков данного сообщения электронной почты.
methodIsBodyHtmlПолучает или задает значение, показывающее, имеет ли основная часть почтового сообщения формат HTML.
methodPriorityПолучает или задает приоритет данного сообщения электронной почты.
methodReplyToУстаревшее. Получает или задает адрес ReplyTo для данного почтового сообщения.
methodReplyToListПолучает или задает список адресов для ответа для данного сообщения электронной почты.
methodSenderПолучает или задает адрес отправителя данного сообщения электронной почты.
methodSubjectПолучает или задает строку темы для данного сообщения электронной почты.
methodSubjectEncodingПолучает или задает кодировку, используемую для темы данного сообщения электронной почты.
methodToВозвращает коллекцию адресов, содержащую получателей данного сообщения электронной почты.

Настройка 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($str31) == " ") 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$errstr10);

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($str31) == " ") { 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($fpfilesize($file))));

fclose($fp);

$code_file2=base64_encode("привет, это типа второй файл");
$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--

";
$smtp_conn fsockopen("smtp.mail.ru"25,$errno$errstr10);

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);

?>

Похожее:  BASE-NET (Бейс) - вход в личный кабинет, официальный сайт

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *