10 мая, 2015

Отправка e-mail сообщений в своей программе

Рассмотрим отправку почтового сообщения программно в приложении небольшого размера, а именно какие есть способы реализации и проблемы.

Краткая информация

Технология e-mail использует для работы такую схему:

Используется несколько протоколов (инструкций/наборов правил):

  • Протокол SMTP — для отправки сообщений через свой почтовый сервер.
    Работает на участке: Клиент-Отправитель → Сервер-Отправителя.
  • Протоколы POP, IMAP — для получения сообщений со своего почтового сервера.
    Работает на участке: Сервер-Получателя → Клиент-Получатель.

Обмен всех сообщений между пользователями идет через их почтовые серверы. Причем Сервер-Получателя может не доверять Серверу-Отправителя. Заметка: это важно, так как письма в этом случае могут не доходить, если мы например будем использовать свой Сервер-Отправителя, не выполнив определенные условия. Проще всего использовать общедоступные сервисы почты.

Сервер:

  • Дает возможность создать учетную запись пользователя.
  • Хранит все сообщение пользователя.
  • Выступает доверенным «лицом» пользователя. Это значит что пользователь отправляет сообщения только с помощью своего сервера.
  • Дает возможность принимать сообщения от других пользователей. Сервер находиться постоянно в рабочем состоянии, что позволяет ему обрабатывать подключения от других почтовых серверов.

Клиент:

  • Чаще всего это программа на локальном компьютере, которая подключается к почтовому серверу.
  • Использует данные учетной записи пользователя (логин и пароль) для подключения к потовому серверу.
  • Позволяет просматривать полученные сообщения, хранящиеся на почтовом сервере (через POP, IMAP).
  • Позволяет отправлять сообщения другим, с помощью почтового сервера (через SMTP).

Заметка. Возможна ситуация отправки сообщения самому себе:

  1. Мы подключаемся к своему почтовому серверу используя логин/пароль (через SMTP).
  2. Отправляем новое письмо, где в качестве получателя указываем свой же адрес.

Итак, для отправки сообщений нам необходимы:

  • Адрес SMTP сервера (IP или домен)
  • Данные учетной записи (логин и пароль)
  • Почтовый адрес получателя (может быть наш текущий)

Дополнительные ссылки:

SMTP сервер

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

  1. Незащищенный канал, без шифрования трафика.
  2. Защищенный канал, шифрование трафика SSL/TLS.
  3. Защищенный канал, команда StartTLS - перевод вначале незащищенного канала в режим защищенного SSL/TLS.

Защищенный канал между клиентом и сервером требуют больше «усилий» со стороны клиента. Например подключение дополнительных библиотек для поддержки защищенного соединения, что скажется на размере программы-клиента. Если наша цель создать небольшую программу-клиент, то:

  • Предпочтительнее не использовать защищенный канал.
  • Самостоятельно шифровать тело сообщения.
  • Помнить что логин и пароль передаются в сети открыто!

Важно: Проблема в том, что почти все современные почтовые сервисы работают только через защищенный канал.

Дополнительные ссылки:

Web-доступ к почте

Почтовые сервисы предоставляют возможность просматривать и отправлять сообщения с помощью браузера. Это альтернатива локальным программам-почтовым клиентам (которые используют протоколы POP/IMAP/SMTP). Мы также можем использовать этот интерфейс для отправки, через эмуляцию работы пользователя внутри браузера.

Важно: Если почтовый сервис работает только через защищенное SSL-соединение (HTTPS), то также как и в случае с SMTP, это требует больше «усилий» со стороны клиента!

Программная реализация

Если наша цель уменьшить размер приложения, то с учетом рассмотренного выше, стоит рассмотреть такие варианты:

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

Утилиты для тестирования

Пример команд для тестирования

Ключевые слова и фразы

  • SMTP without authentication
  • SMTP without SSL/TLS/StartTLS

Комментариев нет:

Отправить комментарий