Как @NicolasRiousset указывает, что это, вероятно, слишком болезненно без надлежащего клиента, но если текстовый файл содержит хорошо отформатированный простой текст (только 7-разрядный US-ASCII, длина текста больше, чем ... мм, немного менее 1000 символов) вы можете сделать что-то вроде
#!/bin/bash
case $# in 2) ;; *) echo "Usage: $0 <host> <filename.txt>"; exit 0;; esac
(printf $'%\r\n' "helo mydomain.com" \
"mail from:<[email protected]>" \
"rcpt to:<[email protected]>"
"data"
"Subject: $2"
""
sed $'s/^\./../;s/$/\r/' "$2"
printf $'%\r\n' "." "quit"
) |
telnet "$1" 25
Возможны проблемы с синхронизацией; nc
может работать лучше обычного старого telnet
. Правильный инструмент будет ждать ответа SMTP-сервера после каждой команды и проверить его код возврата.
Я использую строки типа Bash C (для какой-либо) переносимости, но (например) ваш sed
может все еще не играть хорошо. В дополнение к замене разрывов строк CRLF: s, скрипт выполняет точечную начинку, как требуется RFC5321.
Обратите внимание, что команды mail from:
и rcpt to:
были немного неправильными.