Рассмотрим отправку почтового сообщения программно в приложении небольшого размера, а именно какие есть способы реализации и проблемы.
Краткая информация
Технология e-mail использует для работы такую схему:
Используется несколько протоколов (инструкций/наборов правил):
- Протокол SMTP — для отправки сообщений через свой почтовый сервер.
Работает на участке:Клиент-Отправитель → Сервер-Отправителя
. - Протоколы POP, IMAP — для получения сообщений со своего почтового сервера.
Работает на участке:Сервер-Получателя → Клиент-Получатель
.
Обмен всех сообщений между пользователями идет через их почтовые серверы. Причем Сервер-Получателя
может не доверять Серверу-Отправителя
. Заметка: это важно, так как письма в этом случае могут не доходить, если мы например будем использовать свой Сервер-Отправителя
, не выполнив определенные условия. Проще всего использовать общедоступные сервисы почты.
Сервер:
- Дает возможность создать учетную запись пользователя.
- Хранит все сообщение пользователя.
- Выступает доверенным «лицом» пользователя. Это значит что пользователь отправляет сообщения только с помощью своего сервера.
- Дает возможность принимать сообщения от других пользователей. Сервер находиться постоянно в рабочем состоянии, что позволяет ему обрабатывать подключения от других почтовых серверов.
Клиент:
- Чаще всего это программа на локальном компьютере, которая подключается к почтовому серверу.
- Использует данные учетной записи пользователя (логин и пароль) для подключения к потовому серверу.
- Позволяет просматривать полученные сообщения, хранящиеся на почтовом сервере (через POP, IMAP).
- Позволяет отправлять сообщения другим, с помощью почтового сервера (через SMTP).
Заметка. Возможна ситуация отправки сообщения самому себе:
- Мы подключаемся к своему почтовому серверу используя логин/пароль (через SMTP).
- Отправляем новое письмо, где в качестве получателя указываем свой же адрес.
Итак, для отправки сообщений нам необходимы:
- Адрес SMTP сервера (IP или домен)
- Данные учетной записи (логин и пароль)
- Почтовый адрес получателя (может быть наш текущий)
Дополнительные ссылки:
SMTP сервер
При отправке сообщения, для подключения к smtp-серверу практически всегда необходимы логин и пароль. Причем есть возможность подключиться через:
- Незащищенный канал, без шифрования трафика.
- Защищенный канал, шифрование трафика SSL/TLS.
- Защищенный канал, команда StartTLS - перевод вначале незащищенного канала в режим защищенного SSL/TLS.
Защищенный канал между клиентом и сервером требуют больше «усилий» со стороны клиента. Например подключение дополнительных библиотек для поддержки защищенного соединения, что скажется на размере программы-клиента. Если наша цель создать небольшую программу-клиент, то:
- Предпочтительнее не использовать защищенный канал.
- Самостоятельно шифровать тело сообщения.
- Помнить что логин и пароль передаются в сети открыто!
Важно: Проблема в том, что почти все современные почтовые сервисы работают только через защищенный канал.
Дополнительные ссылки:
Web-доступ к почте
Почтовые сервисы предоставляют возможность просматривать и отправлять сообщения с помощью браузера. Это альтернатива локальным программам-почтовым клиентам (которые используют протоколы POP/IMAP/SMTP). Мы также можем использовать этот интерфейс для отправки, через эмуляцию работы пользователя внутри браузера.
Важно: Если почтовый сервис работает только через защищенное SSL-соединение (HTTPS), то также как и в случае с SMTP, это требует больше «усилий» со стороны клиента!
Программная реализация
Если наша цель уменьшить размер приложения, то с учетом рассмотренного выше, стоит рассмотреть такие варианты:
- Использовать небольшие библиотеки для защищенного соединения, со статической линковкой, для того чтобы не включить в программу весь функционал библиотеки.
- Как альтернативу сторонним библиотекам, использовать возможности операционных систем, на которых будет работать программа.
- Использовать самое необходимое для подключения, исключая излишнюю универсальность. Например если заранее известны SMTP сервера, с которыми нужно работать, то стоит определить и использовать один общий криптографический алгоритм.
Утилиты для тестирования
- OpenSSL — Тестирование соединения с сервером и определение используемых им криптографических алгоритмов;
- SSLyze — Утилита протестирует и покажет все поддерживаемые сервером криптографические алгоритмы;
- Утилита для тестирования smtp-сервера.
- Тестирование почтового сервера на защищенность и список почтовых серверов.
- Утилита CMail от Inveigle.net — бесплатная утилита для отсылки почты. Позволяет протестировать smtp-сервер.
Пример команд для тестирования
Ключевые слова и фразы
- SMTP without authentication
- SMTP without SSL/TLS/StartTLS
Это довольно подробная статья, действительно полезная. Во время поиска SMTP я нашел еще один инструмент.
ОтветитьУдалитьСсылка здесь
dnschecker.org/smtp-test-tool
Лучшая часть этого инструмента - это ссылки на инструкции по настройке SMTP различных ведущих поставщиков услуг электронной почты. На этом веб-сайте вы также получите ссылки на инструменты, связанные с DNS, IP, электронной почтой и многим другим.
Думаю, это будет очень полезно для ваших читателей.