Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумПочта и рассылки

swaks: ручная отправка письма для проверки

rawsocket
rawsocket
Ветеран
сообщений 2290
с фев
1 сентября, 08:32первое сообщение

Когда почта встала, а клиент показал одну строку про ошибку, гадать дальше бессмысленно. Нужен полный разговор с сервером, обе стороны, целиком.

Для этого есть swaks, маленький скрипт на перле. Ставится из репозитория или качается одним файлом.

Простейший вызов:

swaks --to proverka@example.net --from robot@moy-domen.net \
      --server mail.moy-domen.net:587 --tls \
      --auth-user robot@moy-domen.net --auth-password 'parol'

Он печатает весь обмен построчно: -> это то, что ушло, <- это ответ. Видно всё, от приветствия до финального кода.

обычный прогон swaks
обычный прогон swaks

Половина вопросов по почте закрывается этим выводом за минуту.

читаю байты, а потом уже документацию
Женя Ковалёв
Женя Ковалёв
Новичок
сообщений 62
с авг, второй сезон
8 февраля, 11:49#2

ставится через apt или как? у меня дебиан

rawsocket
rawsocket
Ветеран
сообщений 2290
с фев
15 июля, 14:06#3

apt install swaks там же лежит. На винде проще взять сам файл, он один и работает при установленном перле.

читаю байты, а потом уже документацию
tcpdump_fan
tcpdump_fan
Знаток
сообщений 1010
с июн
22 декабря, 17:23#4

Хорошая штука, добавлю пару флагов, которые гоняю чаще прочих.

--quit-after доводит разговор до нужного места и обрывает. С --quit-after TLS видно, поднялось ли шифрование, письмо при этом никуда не уходит. С --quit-after RCPT проверяется, примет ли сервер конкретного получателя, тело опять же остаётся дома.

Удобно, когда чужой ящик трогать нельзя.

слушаю провод, а не догадки
Костя Фомин
Костя Фомин
Знаток
сообщений 1600
с апр
1 мая, 08:40#5

Плюс --tls-optional против --tls. Первый пробует STARTTLS и продолжает без шифрования, если сервер его не умеет. Второй в такой ситуации обрывается с ошибкой. При отладке лучше жёсткий вариант: он сразу скажет правду.

Ещё -tlsc для порта 465, там шифрование поднимается до приветствия.

Ольга Ветрова
Ольга Ветрова
Участник
сообщений 590
с сен
8 октября, 11:57#6
Костя Фомин: При отладке лучше жёсткий вариант

Подпишусь. У меня был случай, когда --tls-optional тихо ушёл в открытый обмен, и я час искала, почему пароль летит по проводу голым. С --tls увидела бы в первую же секунду.

tcpdump_fan
tcpdump_fan
Знаток
сообщений 1010
с июн
15 марта, 14:14#7

Она и не обязана предупреждать, флаг так и назван.

слушаю провод, а не догадки
Костя Фомин
Костя Фомин
Знаток
сообщений 1600
с апр
22 августа, 17:31#8

Раз тема про ручную отправку, скину заготовку под проверку тяжёлого письма. Часто ловят отказ по весу, и swaks умеет собрать вложение сам.

swaks --to test@example.net --from robot@example.net \
      --server mail.example.net:587 --tls \
      --attach-type application/pdf --attach @/tmp/obrazec.pdf \
      --header 'Subject: proverka vesa' \
      --quit-after DATA

--attach кладёт файл целиком, --attach-body подменяет текстовую часть. Если сервер объявил SIZE, swaks сверит вес до отправки и скажет об этом сам. Дальше остаётся сравнить объявленный потолок с тем, что реально уходит после кодирования: base64 добавляет примерно треть.

ilya.works
ilya.works
Участник
сообщений 305
с ноя
1 января, 08:48#9

Не знал про сверку с SIZE. Это работает только когда сервер его объявляет в EHLO?

Ольга Ветрова
Ольга Ветрова
Участник
сообщений 590
с сен
8 июня, 11:05#10

Только тогда. Если строки SIZE в ответе на EHLO нет, swaks просто отправит и получит отказ уже после DATA. Поэтому смотреть на список возможностей полезно всегда: там же видно AUTH, PIPELINING, 8BITMIME.

Кстати, тот же список выдёргивается и без swaks, через openssl s_client -starttls smtp, если под рукой больше ничего нет.

Женя Ковалёв
Женя Ковалёв
Новичок
сообщений 62
с авг, второй сезон
15 ноября, 14:22#11

забрал всю тему в заметки, спасибо. попробую на своём ящике сегодня

rawsocket
rawsocket
Ветеран
сообщений 2290
с фев
22 апреля, 17:39#12

Итог для тех, кто найдёт поиском: swaks закрывает три вопроса. Дошло ли соединение, поднялось ли шифрование, принял ли сервер получателя. Каждый проверяется отдельно через --quit-after, без единого доставленного письма.

Если после этого почта всё равно стоит, копать надо уже в очереди или на стороне приёмника.

читаю байты, а потом уже документацию