Перейти к содержимому

Для чего протокол smtp

  • автор:

Что такое SMTP-протокол и как он устроен?

Объясняем принципы работы Simple Mail Transfer Protocol — «старого» протокола передачи почты, который актуален до сих пор.

Эта инструкция — часть курса «Как работают сетевые протоколы».

Смотреть весь курс

Изображение записи

SMTP (Simple Mail Transfer Protocol) — протокол передачи почты. Он был представлен еще в 1982 году, но не теряет актуальности до сих пор. В статье разбираемся, какие задачи решает протокол и как он работает.

Для чего используется SMTP

У протокола две главные задачи:

  • Проверка корректности настроек системы и предоставление «разрешения» на отправку email-сообщения для определенного устройства.
  • Отправка исходящего сообщения на заданный адрес электронной почты и подтверждение успешной доставки. Если сообщение доставить не удается, отправитель получает соответствующее извещение.

SMTP и его место в стеке TCP/IP

Теоретически SMTP умеет работать с практически любыми протоколами так называемого транспортного уровня, включая TCP, UDP и другие. Еще на заре развития протокола за ним закрепили два номера порта:

  • Первый — это порт 25, посредством которого почта передается между почтовыми серверами.
  • Второй — порт 587, благодаря которому почта передается от почтового клиента на сервер.

В большинстве случаев протокол SMTP используется для передачи исходящей почты с использованием порта TCP 25. То есть можно сказать, что SMTP-порт — это как раз TCP 25, хоть и не всегда. Иногда задействуется еще порт 465. Так происходит, когда порт требует защищенного SSL-соединения.

Но в большинстве случаев используется лишь один транспортный протокол TCP с портом 25 (это SMTP-порт по умолчанию). Другие варианты применяются крайне редко, например, когда провайдеры по какой-то причине закрывают доступ к 25 порту. Они могут делать это, например, для блокировки спам-рассылок.

Электронное письмо и его формат

Сообщение электронной почты всегда состоит из трех элементов:

  • Так называемый конверт.
  • Заголовок.
  • Тело письма.

Конверт применяется для передачи сообщений электронной почты от клиенту к серверу и обратно. При этом как клиент, так и сервер взаимодействуют друг с другом в обычном формате «запрос-ответ». В ходе взаимодействия между ними передаются текстовые строки.

Что касается заголовка и тела письма, то их параметры прописаны в отдельном документе — RFC2822.

Формат поля заголовка Received:

Received:
From host
by host
via physical-path
with protocol
id message-id
for final e-mail destination

Это поле используется для идентификации тех SMTP-серверов, которые были задействованы в процессе доставки сообщения от отправителя к получателю. Любой сервер из цепочки добавляет к сообщению собственное поле Received, где можно видеть техническую информацию об этом сервере.

Return-Path — поле возврата, которое используется для определения маршрута, по которому прошло сообщение. Если оно было отправлено прямо на сервер получателя, то в поле отображается один адрес. Если же серверов несколько, они будут отображаться списком.

Команды и ответы SMTP

Команды

Все они состоят из четырех символов. Сакрального замысла здесь нет, просто в самом начале разработчики договорились, что длина будет именно такой. Ниже — основные команды SMPT. Есть и другие, но они используются реже.

  • Команда Helo применяется для установки соединения. Эта операция будет выполнена только в том случае, если клиент указал свой домен и собственный почтовый адрес.
  • Команда Mail применяется для задания адреса отправителя.
  • Команда RCPT используется исключительно для того, чтобы прописать адрес получателя. Электронное сообщение можно передать сразу нескольким получателям, для чего требуется использовать команду RCPT несколько раз подряд.
  • Команда DATA нужна для уведомления принимающего сервера о завершении конверта, после чего идет само письмо.
  • Команда QUIT применяется для разрыва соединения с сервером сразу после завершения приема сообщения.

Ответы SMTP

Здесь все одновременно и проще, и сложнее. Ответы в случае SMTP состоят из двух частей:

  • Код сообщения. Дает возможность изучить корректность и правильность отправки.
  • Текстовое сообщение. Объясняет, что произошло в ходе отправки или получения. Как правило, сообщение формируется для того, что произошло. В подавляющем большинстве случаев такое сообщение предназначено для людей, а не компьютеров.

Коды сообщений начинаются на 2, 3, 5. Если сообщение начинается на 2, это значит, что предыдущая команда успешно завершена. «Тройка» в коде означает успешную отправку с необходимостью предоставить дополнительные данные.

Если сообщение начинается на 5, это означает технический сбой. Так, ошибка 502 — индикатор нереализованной команды, а 503 сообщает о неправильной последовательности команд.

Как работает SMTP — простыми словами

Давайте представим, что вы установили и настроили собственный SMTP-сервер. Далее вы планируете отправить письмо. Работает отправка по определенному алгоритму:

  • Указывается адрес отправителя, после чего система пользователя соединяется, к примеру, с SMTP почтового клиента Gmail.
  • Система передает серверу данные, включая email отправителя и получателя, тему письма, его содержимое.
  • Сразу после этого система начинает поиск SMTP-сервера получателя электронного сообщения.
  • Если этот сервер не найден или он не отвечает, SMTP-сервер пытается предпринять еще несколько попыток связи. Если ничего не получается, то система выдает ошибку отправки. При этом протокол сообщит, почему письмо не будет доставлено. Так, проблема может быть в несуществующем адресе или в блокировке сообщений.

Если все хорошо, то далее в работу вступают уже другие протоколы — POP и IMAP, но о них мы поговорим в другой статье.

Пример работы SMTP

В качестве примера давайте рассмотрим пример сеанса SMTP, который инициализируется при необходимости отправить электронное письмо. На картинке ниже — данные сеанса, с которыми мы будем работать дальше.

Здесь мы видим подключение к почтовому серверу по 25 порту. Говоря техническим языком, подключение выполнено по адресу 220 smtp.example.ru ESMTP Postfix на 25 порт. Начало подключения — использование команды HELO, которая нужна для указания собственного домена. После этого вступает в работу сервер, который возвращает статус 250. Что это такое? Все просто: соединение установилось без проблем. После этого сервер еще раз пишет доменное имя в текстовом сообщении.

Теперь наступает очередь использования команды Mail FROM, которая нужна для отображения адреса отправителя сообщения. Если все хорошо, то сервер снова отвечает сообщением со статусом 250. Мы видим, что с текстовой частью все хорошо, команда выполнена, проблем не возникло.

Наступает следующий этап — использование команды RCPT TO для того, чтобы указать адрес получателя. Если сервер возвращает статус 250, то мы уже знаем, что это означает. Все удалось, теперь нужно выполнить команду DATA для ввода самого письма. В этом случае сервер отвечает уже не статусом 250, а другим — 354. После этого можно начинать вводить текст письма. Важный нюанс: заканчиваться все это должно отдельной строкой, которая содержит всего одну точку.

Сообщение всегда состоит из двух частей. Первая — заголовок, вторая — тело сообщения. Последнее необходимо отделять от заголовка пустой строкой. В этом случае требуется использовать заголовок FROM, это адрес пользователя, отправившего сообщение. Указывать нужно не только сам адрес, но и имя. А еще требуется заголовок, который дает получателю понять, в чем заключается основной посыл сообщения. Что касается пустой строки, то она отделяет заголовки от тела письма.

Возьмем самое простое сообщение, которое состоит из двух строчек текста: это «Hello, email world!» и «Hello, SMTP!». Заканчивается письмо строкой, которая содержит всего одну точку. Но эта строчка не будет видна получателю, она чисто техническая и будет обязательно убрана в ходе передачи. Если же точка нужна, то нужно указать сразу две точки, из которых одна будет удалена.

Наконец, если есть точка, то сервер видит, что письмо полностью завершено, выдавая статус сообщения 250 2.0.0 Ok: queued as 7FD9DC2E0060. Все это означает, что письмо уже находится в очереди ожидания. Для завершения сеанса нужно ввести всего одну команду — QUIT. Сервер ответит сообщением со статусом 221, что означает «пока».

Нужен ли собственный сервер SMTP?

Здесь все зависит от задач, которые будет решать пользователь. SMTP подходит для реализации масштабного спектра задач — от отправки сообщения до доставки его получателю. Чаще всего SMTP используют для транзакционных писем, массовых рассылок или личной переписки.

Собственный SMTP дает немного больше преимуществ перед корпоративными (или, например, Google). Это, как правило, невысокая цена, внимательное отношение со стороны разработчиков и хорошая доставляемость массовых рассылок.

Достоинство SMTP в том, что его достаточно просто внедрить, для этого протокола есть обширная документация и развитое комьюнити.

Немного о безопасности и спаме

Протокол SMTP очень простой, у него нет никаких инструментов для защиты пользовательских данных от злоумышленников. Так, адреса, указанные в соответствующем поле, не проверяются.

Кроме того, у SMTP по дефолту не используется шифрование, так что любые письма, передаваемые разными компаниями, могут быть прочитаны — было бы желание и соответствующие инструменты. Но это относится к SMTP первой версии. В улучшенном варианте разработчики добавили шифрование. Для того, чтобы его задействовать, нужно использовать специальную команду STARTTLS.

Еще одна проблема SMTP — обилие нежелательных рекламных сообщений. К сожалению, протокол не содержит никаких защитных инструментов для ликвидации спама. Правда, многие современные почтовые серверы стараются использовать и внешние механизмы.

Большинство почтовых серверов для безопасности настраиваются на работу лишь с локальными юзерами. То есть это те пользователи, у которых есть ящики с адресом из пула домена, который они и обслуживают. Здесь встречаются и новые термины. Так, серверы, которые работают в ином режиме, позволяя передавать почту абсолютно на все адреса, называются «открытые релеи». Они нужны обычным пользователям, но активнее всего их используют злоумышленники. Зачем? Чтобы рассылать спам, конечно же. Поэтому за режимом работы корпоративных серверов нужно следить. Если при проверке сети окажется, что сервер работает в режиме открытого релея, стоит поговорить с администратором сервера.

А еще можно проверить адрес отправителя посредством цифровой подписи, о чем мы уже упоминали выше.

Например, есть возможность проверки email отправителя, воспользовавшись цифровой подписью. С этой целью используется, например, взаимодействие с системой DNS. В ней хранится открытый ключ электронной подписи для конкретного домена. И этот ключ как раз можно использовать для проверки.

В сухом остатке

SMTP — проверенный временем протокол передачи электронной почты, который просто работает. Да, у него есть свои недостатки, но они нивелируются простотой и надежностью протокола. К слову, он может использоваться как для отправления сообщений на почтовый сервер, так и на целую группу серверов.

Кстати, можно сделать собственный сервер SMTP для того, чтобы отправлять массовые рассылки. Но в этом случае придется выполнить множество разных тасков, включая добавление обработки статуса доставки письма, обход разного рода «черных» и «серых» списков. Требуется еще и удобная статистика отправлений, и возможность отписки от рассылки.

Для того чтобы все реализовать, лучше использовать специализированный сервис, владельцы которого развернули необходимые услуги. В этом случае разработчики требуются лишь для того, чтобы добавить сервис к CRM-системе.

Можно пойти еще дальше и организовать сервисы разных рассылок. Их достоинство состоит в том, что все возможности встроены в пользовательский интерфейс. А возможности не только базовые, ведь в таких сервисах есть функции сбора писем и форм подписки, работы с контактами, настройка цепочек в автоматическом режиме и проведение сплит-тестов.

SMTP-сервер можно реализовать на инфраструктуре Selectel

Для этого арендуйте выделенный сервер.

Что такое почтовый сервер и как он работает

Управлять электронной почтой сложно: люди отправляют и получают тысячи писем в день. Но решение есть — почтовый сервер. Подробности в тексте.

Изображение записи

Почтовый сервер — это собирательное название, которое часто применяют для агентов доставки (MTA, Mail Transfer Agent) и приема (MDA, Mail Delivery Agent) почты. Без них пользователи не могли бы передавать сообщения на другие почтовые клиенты.

Серверы электронной почты работают примерно так же, как и другие типы серверов. Они отвечают за маршрутизацию электронной почты по сети и хранение писем. Такие серверы полагаются на IP-адреса, прикрепленные к электронным письмам, и систему DNS, чтобы гарантировать, что каждое сообщение будет направлено через интернет до нужного получателя, независимо от его домена. Почтовые серверы работают на базе протокола SMTP, Simple Mail Transfer Protocol, — простого протокола передачи почты.

Что такое SMTP-сервер

Простой протокол передачи почты, SMTP — это коммуникационный протокол, который позволяет отправлять и получать электронные письма. Без SMTP-сервера вы не сможете отправить электронную почту получателям в больших количествах. Сервер упрощает этот процесс — например, проверяет, активна ли учетная запись получателя письма.

Также если письмо не доставлено, протокол SMTP возвращает его отправителю. Возвращенные сообщения содержат данные, информирующие о причине инцидента. Например, о том, что адрес получателя был указан неверно.

Преимущества SMTP-сервера

Массовая рассылка писем без ограничений

Бывают ситуации, когда провайдеры устанавливают лимиты на отправку писем с одной учетной записи. Если такое происходит, она может быть заблокирована за подозрение в спаме. Использование своего сервера позволит обойти это ограничение.

Анализ технических ошибок

В случае некорректной отправки письма SMTP-сервер всегда возвращает сообщение с причиной.

Экономия ресурсов

Хотя SMTP-сервер обладает меньшим функционалом, нежели специальные сервисы для рассылок, он лучше подходит для массовых рассылок, которые не содержат изображения, анимации и видеозаписи.

Недостатки SMTP-сервера

Отсутствие шифрования

В стандартной версии SMTP-сервера отсутствует защита от атак злоумышленников. Однако функционал предусматривает создание защищенного соединения при помощи SSL или TLS.

Отсутствие фильтрации от спама

Если пользователь не будет использовать специальные решения, сервер может быть заполнен спам-письмами, которые придется удалять вручную.

Необходимо дорабатывать сервер вручную

При аренде SMTP-сервера настройкой занимается техническая поддержка, в противном случае — пользователь.

Почтовый сервер: принцип работы

Во время работы SMTP-сервер выполняет роль посредника между MTA отправителя и MDA получателя. Процесс отправки сообщения состоит из нескольких действий:

  • Вы заходите с почтового клиента, пишете текст, указываете адрес получателя и нажимаете кнопку Отправить. После этого письмо попадает на один из серверов SMTP.
  • Система отправителя передает SMTP-серверу собственный адрес и адрес получателя, тему и содержание письма.
  • После получения информации сервер начинает поиск данных получателя;
  • В случае ошибки система предпримет еще несколько попыток передачи, после чего вернет ответ с кодом ошибки.
  • В случае успеха активируются протоколы POP3 и IMAP, про которые можно прочитать здесь.

SMTP-сессия

Для обмена информацией SMTP-серверы устанавливают между собой сессию. Рассмотрим подробнее, как она работает.

Подготовка к отправке

Для установки связи отправителя и получателя используется команда HELLO. Отправитель направляет пакет с командой и адресом получателя:

HELLO host2.com 

host2 — домен получателя; то, что идет после @ в почтовом адресе.

В ответ на команду SMTP-сервер получателя возвращает следующее сообщение:

250 host1.com 

host1 — домен отправителя; 250 — код о том, что сервер получателя разрешает дальнейшее «общение».

Уведомление об отправке

Далее отправитель передает информацию о себе с помощью команды MAIL FROM:

MAIL FROM: user1@host1.ru 

На что получает ответ от получателя, что информация доставлена и сервер разрешает отправку с ящика отправителя:

250 2.1.0 Ok 

Выбор почты получателя

После отправитель сообщает, кому будет направлено письмо, с помощью команды RCP TO:

RCP TO: user2@host2.ru 

В случае корректной работы ответ следующий:

250 2.1.0 Ok 

Передача письма

С помощью команды DATA происходит отправка сигнала о начале передачи данных:

DATA FROM: user1@host1.ru TO: user2@host2.ru 

В ответ отправитель получает сообщение, которое включает ID, по которому можно найти лог ошибки, если письмо не отправится:

250 2.0.0 Ok: queued as 1AB2CD3EFG 

Завершение передачи

Завершение передачи происходит с помощью команды QUIT, на которую отправитель получает ответ следующий ответ:

221 2.0.0 Bye 

Классификация SMTP-серверов и их различия

Входящие и исходящие серверы

Почтовые серверы можно настроить на базе трех режимов:

  • только отправка почты,
  • только прием почты,
  • отправка и прием почты.

Набор протоколов для работы сервера будет отличаться для каждого из режимов. Например, для приема сообщений используются протоколы POP3 или IMAP, а для отправки — SMTP. Описать это можно следующей таблицей:

Почтовый сервер Сервер для входящих писем Сервер для исходящих писем
selectelmail.ru pop3.selectelmail.ru smtp.selectelmail.ru

При использовании протокола POP3 происходит загрузка письма на устройство получателя, после чего оригинал удаляется с сервера. Протокол IMAP работает иным образом: он просто получает доступ к письму на сервере и воспроизводит его копию на устройстве пользователя.

Протокол SMTP используется непосредственно для отправки писем. Подробнее о его работе вы можете прочитать в предыдущей статье, а более подробно о разнице POP3 и IMAP — здесь.

Обычные и выделенные, платные и бесплатные

Условно SMTP-серверы можно разделить на две категории:

  • Обычные почтовые серверы. Это серверы для отправки личной почты, которые, как правило, используют провайдеры. Их отличительная черта — лимит на отправку сообщений, который устанавливает владелец сервера.
  • Выделенные серверы ретрансляции SMTP. Это серверы для массовых рассылок и отправки транзакционных писем.
Ретрансляция SMTP — процесс передачи письма от одного SMTP-сервера к другому, в обход ограничений на прямую отправку. Серверы ретрансляции не имеют лимита (или лимит достигает тысячи сообщений в секунду) на количество отправленных сообщений, что позволяет не опасаться попадания IP в черный список провайдера. Кроме того, они специально настроены для обработки большого объема писем и имеют мощные механизмы для обеспечения доставки и предотвращения блокировки.

Также можно условно разделить SMTP-серверы на платные и бесплатные. Первые не имеют каких-либо ограничений на рассылку писем кроме вычислительной мощности. Вторые же ограничены суточными лимитами на количество отправляемых писем, а также на пул пользователей — это важно учитывать при настройке рассылки по регионам. Таким образом, бесплатные почтовые сервисы не подойдут для бизнес-задач.

Стоит ли приобретать дополнительный почтовый сервер SMTP для рассылки?

Так как в большинстве случаев провайдер бесплатной почтовой службы накладывает ограничения на количество отправляемых писем, возникает потребность в приобретении собственного SMTP-сервера.

Сервис Selectel позволяет отправлять до трех млн писем в час с 99,99% доставляемостью. Вместе с надежностью клиент получает проверку адресов по стоп-листам и стоп-ловушкам, отчеты о статусе доставки и сводную статистику по рассылкам, а также соответствие 152-ФЗ. Это значит, что клиент может хранить и обрабатывать персональные данные четвертого и третьего уровней защищенности: email-адреса, ФИО, паспортные и другие личные данные, номера телефонов.

Использовать собственный почтовый сервер можно по нескольким причинам:

  • Забота о приватности. Для некоторых пользователей важно, чтобы письма не анализировались алгоритмами компаний.
  • Безопасность сети. Поскольку почтовые ящики являются одним из туннелей в сеть компании, на почту нередко приходят различные письма с сомнительным содержанием. Собственный SMTP-сервер позволяет настраивать дополнительное ПО для проверки писем и вложений.
  • Наличие «красивого» адреса. Рассылка уходит не с привычных доменов вроде Gmail, а с собственных.

Пример настройки SMTP

Для настройки почтового сервера будем использовать hMailServer, а в качестве почтового клиента — Mozilla Thunderbird.

Для начала перейдите на страницу загрузки Hmailserver и установите последнюю стабильную версию:

Во время установки выберите Full Installation и укажите тип базы данных, а также задайте пароль:

В окне авторизации, которое встречает после установки, следует выбрать нужный хост, нажать кнопку Connect и ввести пароль:

После входа откроется интерфейс для работы с сервером. Нажмите Add Domain и добавьте домен для почтового сервера:

После в пункте Domains появится наш созданный домен. В его разделе следует перейти в папку Accounts и создать там пользователей:

Следующий шаг. Теперь необходимо перейти в раздел Settings → Advanced → TCP/IP Ports и открыть порты для отправки и получения почты, которые указаны в списке:

Для открытия портов перейдите в брандмауэр Windows и создайте соответствующий пункт. Данный процесс можно увидеть на рисунках ниже:

Далее необходимо установить клиент Mozilla Thunderbird. Этот процесс весьма типовой, поэтому вы можете справиться самостоятельно. При первом запуске программа предлагает ввести свою учетную запись:

Важный этап — ручная настройка. Необходимо указать IP-адрес сервера и порты для работы:

На данном этапе у нас есть свой почтовый сервер и клиент. Стоит отметить, что для пересылки сообщений необходимо зарегистрировать DNS-запись — она может быть как локальной (как в данном примере), так и глобальной. Ее можно приобрести у соответствующих провайдеров.

Про настройку SMTP-сервера на базе инфраструктуры Selectel вы можете прочитать в нашей базе знаний.

Как использовать SMTP-сервер Google

SMTP — simple mail transfer protocol — дословно переводится как «простой протокол передачи почты». Из названия понятно, что его используют для отправки электронной почты и доставки писем адресату.

SMTP-сервер, соответственно, это сервер, который отвечает исключительно за корректную работу протокола. Его главная задача — быть ретранслятором между отправителем и получателем. Она заключается в выполнении каждой из двух ключевых функций:

  1. Проверка корректности конфигурации и выдача разрешения устройству, которое пытается отправить сообщение.
  2. Отправка сообщения на указанный адрес и получение кода ответа.

На этом зона ответственности SMTP-сервера заканчивается, его функционал рассчитан только на отправку писем. За получение почты на стороне адресата отвечают протоколы POP3 и IMAP.

Примерный пошаговый алгоритм отправки письма выглядит так:

  1. Сервер отправителя получает необходимые данные — адреса отправителя и получателя и само сообщение, содержащее необходимые поля.
  2. Сервер отправителя ищет адресата, определяя почтового провайдера по электронному адресу, и запрашивает его IP-адрес.
  3. Сервер-отправитель получает ответ от сервера-получателя.

Если со стороны получателя нет ответа, сервер ещё несколько раз пытается установить соединение. В случае, если ответа всё ещё нет — возвращает код ошибки.

Стандартный порт для работы SMTP — 25. Но помимо него также используются 465 и 587 порты для защищённого SSL-соединения и обязательной аутентификации соответственно. Отдельно стоит отметить, что некоторые провайдеры блокируют 25 порт, чтобы предотвратить спам-рассылки, уточняйте этот вопрос индивидуально.

В качестве SMTP-сервера вы можете использовать облачные серверы практически в любой конфигурации. Однако если вы планируете запускать большие рассылки или вам критически важно, чтобы письма не были отмечены как спам, рекомендуем воспользоваться SMTP-сервером Google.

Плюсы использования SMTP-сервера Google

Стоимость. Один из самых очевидных плюсов — использование Google SMTP абсолютно бесплатно, достаточно иметь аккаунт в системе.

Всё уже настроено. Администрирование сервера почты — довольно сложное занятие, которое потребует теоретических знаний сетевых протоколов, а также практического опыта настройки серверов. Используя стороннее решение, вы сэкономите на конфигурации сервера множество часов.

Резервное копирование. Кроме того, вы не несёте ответственность за бесперебойность работы сервера — если что-то «упадёт» среди ночи, этим займутся специалисты Google. Они также обязаны делать резервное копирование отправленной и полученной почты, освобождая вас от головной боли с сохранением ценной и конфиденциальной информации.

Индексация. Дополнительным плюсом хранения почты на серверах Google также является то, что индексация и поиск производятся с помощью вычислительных мощностей корпорации. При использовании одного и того же SMTP Gmail автоматически разместит письма в отправленных и полученных — вся почта будет отображаться в едином месте.

Спам. Борьба со спамом — одна из самых больших проблем при создании собственного почтового сервера. Используя собственный SMTP-сервер, вы должны следить за тем, чтобы ваши письма не попадали в спам. При отправке письма через SMTP-сервер Google вы можете быть уверены, что оно придёт получателю так же, как и обычное письмо с почты gmail. Поскольку Google не использует стандартный 25 порт для отправки писем, вероятность, что провайдер пометит письмо как спам или вовсе заблокирует, снижается.

Недостатки стороннего SMTP

Хранение на удалённом сервере. Один из самых распространённых страхов по поводу сторонних SMTP-серверов заключается в том, что вся ваша переписка находится под контролем Google. Однако конфиденциальность переписки и хранения почты на собственных серверах всё ещё под вопросом, если вы собираетесь общаться со среднестатистическими пользователями — ведь они вряд ли используют собственные SMTP-серверы.

Лимит. Google ограничивает количество писем в день до 100 штук. Этого вполне хватит, если вы тестируете механизм SMTP-отправок или ваш проект не рассчитан на большие объёмы исходящих писем.

Настройка Google SMTP

Для настройки сервиса потребуется доступ к учётной записи экосистемы Google. В общем случае достаточно пары логин-пароль, но если у вас подключена двухфакторная аутентификация, что мы настоятельно рекомендуем сделать, вам нужно сгенерировать специальный пароль приложения на соответствующей странице .

Для работы почты вам понадобится следующий список настроек Google SMTP-сервера :

  1. Сервер SMTP (сервер исходящей почты): smtp.google.com
  2. Имя пользователя SMTP: полный адрес вашей электронной почты
  3. Пароль SMTP: пароль вашей учётной записи Google или кодовое слово, которое вы указали при регистрации приложения.
  4. Порт SMTP: 465
  5. Требуется SMTP TLS/SSL?: да

Обратите внимание, что Google будет автоматически перезаписывать заголовок From любого письма, которое вы отправляете через SMTP-сервер, если оно не совпадает с вашим адресом по умолчанию. Так, если вы при отправки указали несуществующий адрес электронной почты, Google заменит его на ваш. Такое поведение является стандартным, но вы можете регулировать его в настройках почты.

Почтовые клиенты

Кроме автоматизированной отправки писем с помощью SMTP-сервера Google вы также можете использовать данные для подключения к почтовым клиентам — например, Thunderbird или Outlook. Так вы сможете отправлять электронные письма не через браузер или стандартный клиент Google.

Но обратите внимание, чтобы получать почту с вашего Google-аккаунта в другом клиенте, вам нужно использовать POP3 или IMAP. Параметры протоколов находятся в там же, где и все настройки почты Gmail в разделе «Переадресация и POP/IMAP»

Тестирование отправки

Для того, чтобы протестировать конфигурацию, которую мы привели для настройки, напишем простой PHP-скрипт. Почту будем отправлять с помощью пакета phpmailer , установим его через менеджер зависимостей Composer:

composer require phpmailer/phpmailer

Далее создадим файл index.php, в котором укажем настройки SMTP-сервера и попробуем отправить тестовое письмо.

error_reporting(E_ALL); # выводим ошибки
// Подключаем phpmail
require dirname(__FILE__) . '/vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);
// Указываем, что нужно использовать SMTP
$mail->isSMTP();

// В целях отладки включаем вывод результатов на страницу отправки
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';

// Указываем доступы к SMTP
$mail->Host = 'smtp.gmail.com'; # хост
$mail->Port = 587; # порт
$mail->SMTPSecure = 'tls'; # шифрование
$mail->SMTPAuth = true; # авторизация
$mail->Username = "user@gmail.com"; # логин
$mail->Password = "62584jattjjtmxnpwf124"; # полученный пароль

// Получатели и отправители
$mail->setFrom('test-mail@timeweb.com', 'Тестовый отправитель Timeweb'); # от кого
$mail->addReplyTo('replyto@example.com', 'First Last'); # адрес для ответа
$mail->addAddress('mail@kulizh.ru', 'Nikita Kulizhnikov'); # кому

// Тема и содержание
$mail->Subject = 'Timweb: test SMTP Google'; # тема
$mail->msgHTML('

Hello, Timeweb

'); # содержание в формате HTML
$mail->AltBody = 'This is a plain-text message body'; # альтернативный текст, если не удастся использовать HTML


// Выводим результат
if (!$mail->send()) echo "Mailer Error: " . $mail->ErrorInfo;
> else echo "Message sent!";
>

Вы можете использовать такой же скрипт, указав свои данные для подключения, а также получателей и обратный адрес Reply-To.

Теперь исполним PHP-скрипт через браузер, просто запустив страницу. Если всё указано верно, мы увидим подробный вывод результатов отправки письма.

Если какие-то доступы мы указаны неверно, PHPMailer отобразит сообщение об ошибке.

Откроем почтовый клиент, посмотрим, пришло ли письмо. Всё в порядке, видим, что письмо получено. Также мы увидим его в списке отправленной почты в клиенте Gmail.

Заключение

В этой статье мы рассмотрели преимущества использования SMTP-сервера Google. Среди них отсутствие расходов на настройку и обслуживание (услуга бесплатная), надёжное резервное копирование, а также гарантия непопадания в спам-листы.

Кроме того, в целях тестирования мы написали простой PHP-скрипт, на примере которого продемонстрировали работоспособность отправки.

В статье также упомянуты ограничения и минусы использования сторонних сервисов отправки почты. Если вы захотите настроить собственный сервер, воспользуйтесь облачными решениями Timeweb , наши специалисты помогут с выбором конфигурации, а также проконсультируют по поводу настройки PTR-записей.

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.

Почтовая кухня #2: SMTP

SMTP (англ. Simple Mail Transfer Protocol — простой протокол передачи электронной почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.
ESMTP (англ. Extended SMTP) — масштабируемое расширение протокола SMTP. В настоящее время под «протоколом SMTP», как правило, подразумевают ESMTP и его расширения.

Сразу отмечу, что в настоящее время SMTP в чистом виде практически не используется, т.к. он даже не поддерживает элементарно авторизацию… Используется ESMTP. Когда/если вы отправляете почту почтовым клиентом (Outlook, Thunderbird, Evolution, TheBat) происходит работа именно по этому протоколу.

Для работы по этому протоколу нужно соединиться с почтовым сервером по определенному порту и отправить некоторую последовательность ESMTP команд.
Команда представляет из себя строку вида
КОМАНДА[пробел]параметр(опционально)
В ответ на команду сервер возвращает строку вида
XXX[пробел]доп. информация
При этом XXX число в ответе сервера обозначает:
2ХХ — команда успешно выполнена
3XX — ожидаются дополнительные данные от клиента
4ХХ — временная ошибка, клиент должен произвести следующую попытку через некоторое время
5ХХ — неустранимая ошибка

Так вот, давайте перейдем ближе к делу — попробуем элементарно отправить e-mail из консоли через какой-нибудь почтовый сервер (не важно, линукс у вас или виндоус). Так будет проще познакомиться с этим протоколом — сразу на практике. Привожу комманды и параллельно объясняю их значение.

Для нашего эксперимента буду использовать почтовый сервер яндекса. Подразумевается, что уже есть там аккаунт…
Сразу предупреждаю, что после соединения все команды нужно вводить максимально быстро, т.к. при задержке около 15 секунд соединение автоматически разрывается. Рекомендую сперва все команды заранее набрать в текстовом редакторе а после просто вставлять их в командную строку.

telnet smtp.yandex.ru 2025 #соединяемся с smtp почтовым сервером. Адрес и порт smtp сервера можно посмотреть в инструкциях на сайте почтовика
Ответ:

Trying 213.180.204.38…
Connected to smtp.yandex.ru.
Escape character is ‘^]’.
220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Mon, 2 Feb 2009 13:47:22 +0300

Код 220 говорит об успешном соединении

EHLO [91.198.212.5] #Приветствуем сервер и отсылаем ему наш внешний IP (IP не обязательно отсылать, можно обойтись просто EHLO, но сервер скорее всего на это ругнется)
UPD: Желательно отправлять даже не IP а доменное имя для этого IP вродеEHLO you.provider.domain без квадратных скобок
Ответ:

250-smtp18.yandex.ru Hello 91.198.212.5
250-SIZE 20971520
250-8BITMIME
250-PIPELINING
250-CHUNKING
250-ENHANCEDSTATUSCODES
250-DSN
250-X-RCPTLIMIT 25
250-AUTH=LOGIN
250-AUTH LOGIN
250-STARTTLS
250 HELP

Сервер принял приветствие и выслал список поддерживаемых команд. Из этого списка нас интересует AUTH LOGIN. Это команда для авторизации на сервере по base64-закодированному логину и паролю. Так вот, нужно заранее подготовить закодированные в base64 пароль и логин от вашей почты. Можно это сделать, например, здесь seriyps.ru/crypt или командой в Linux echo [ваш пароль/логин] | base64

AUTH LOGIN # Сообщаем серверу о намерении пройти авторизацию
Ответ:

334 VXNlcm5hbWU6

Этот самый VXNlcm5hbWU6 — закодированное в base64 слово “Username:”, а номер ответа 3ХХ означает, что сервер ждет от нас дополнительной информации. Не будем его огорчать:

ВАШ_ЛОГИН_ПОЧТЫ_В_BASE_64 #Отправляем ваш логин почты в base64, например dmFzaWFwdXBraW4=
Ответ:

334 UGFzc3dvcmQ6

Это, как можно догадаться, “Password:” в base64

ВАШ_ПАРОЛЬ_ПОЧТЫ_В_BASE_64 # Отправляем пароль почты в base64, например MTIzNDU2
Ответ:

235 Authentication successful.

т.е. авторизация прошла успешно. Теперь можно отправлять e-mail)

MAIL FROM: vasiapupkin@ya.ru # Сообщаем, что хотим отправить почту с адреса vasiapupkin@ya.ru Адрес может быть любым (в том числе с несуществующих доменов, однако он может проверяться при проверке на спам)
Ответ:

250 2.1.0 Sender syntax Ok;

RCPT TO: billy@microsoft.com # Сообщаем, что хотим отправить письмо на адрес billy@microsoft.com
Ответ:

250 2.1.5 Recipient address syntax Ok; rcpt=

DATA # Здесь сообщаем, что начинаем передачу данных.
Ответ:

354 Start mail input; end with .

Т.е. сервер будет считывать введенные в консоли данные до того момента, пока мы не нажмем Энтер точка Энтер (после этой комбинации письмо сразу отправляется)

  • Заголовков SMTP-протокола (то, что мы вводим при MAIL FROM: и RCPT TO: плюс некоторая служебная информация)
  • Заголовков письма. (отправитель, обратный адрес, адресат, отметки о спам-проверках, тема письма, MIME-тип, кодировка и т.п.)
  • Тела письма. (отделяется от заголовков пустой строкой, обычный ASCII текст либо соответствующий mime типу набор данных)

Два раза Энтер, затем вводим сам текст письма.
Hello, Billy! You’ll die tomorrow!
Энтер. Энтер # Сообщаем, что закончили передачу сообщения
Ответ:

250 2.0.0 accepted; S10436885AbZBBKvs

Т.е. сообщение принято для передачи

Теперь можно отправить еще какое-нибудь письмо (MAIL FROM: RCPT TO:) или завершить сеанс работы
QUIT # Завершаем сеанс
Ответ:

221 2.0.0 smtp18.yandex.ru Out
Connection closed by foreign host.

Это все. Как видно, протокол довольно простой, основные сложности — в формировании самого тела письма.

Резюмируя:
telnet smtp.yandex.ru 2025
EHLO 91.198.212.5
AUTH LOGIN
ВАШ_ЛОГИН_ПОЧТЫ_В_BASE_64
ВАШ_ПАРОЛЬ_ПОЧТЫ_В_BASE_64
MAIL FROM: vasiapupkin@ya.ru
RCPT TO: billy@microsoft.com
DATA
From: Вася Пупкин
To: Билли Г
Subject: Hello Billy
Hello, Billy! You will be die tomorrow!
Энтер . Энтер
QUIT

Конечно, здесь не приведена информация по отправке почты в кодировках текста, отличных от ASCII, не написано про вложенные файлы и MIME но если вам нужны подробности, вот несколько ссылок:
Электронная_почта Wiki
SMTP Wiki
MIME Wiki
rfc5321

При разработке приложений непосредственно с SMTP обычно работать не приходится, для этого используют различные фреймворки или стандартные функции. Для PHP можно посмотреть:
SMTP PEAR расширение
PHPMailer библиотека для работы с электронной почной

Удачных экспериментов!

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

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