Итак, я только что прочитал учебник, чтобы ответить на часть этого вопроса о формате / структуре основного письма. Я начал со следующей команды
$ nc -C {smtp-server-fqdn} 25
Вот дамп разговора {параметризован с опущенными секретами}
220 {smtp-server-fqdn} ESMTP
EHLO {yourdomain.ext}
{smtp-server-fqdn}
250-PIPELINING
250-SIZE 40960000
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250 8BITMIME
HELO {yourdomain.ext}
250 {smtp-server-fqdn}
AUTH LOGIN
334 VXNlcm5hbWU6
{username|base64}
334 UGFzc3dvcmQ6
{password|base64}
235 2.7.0 Authentication successful
MAIL FROM: <someone@sender-fqdn>
250 2.1.0 Ok
RCPT TO: <someone@recipient-fqdn>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: "{VanitySenderName}" <someone@sender-fqdn>
To: "{VanityRecipientName}" <someone@recipient-fqdn>
Subject: {subject}
Date: {date}
{message body}
.
250 2.0.0 Ok: queued as {identifier}
QUIT
221 2.0.0 Bye
<ctrl>+<c>
Так, чтобы сломать это
сама полезная нагрузка электронной почты (следующая строка после DATA
до .
) занимает минимум 75 байт
From: <a@b>
To: <a@b>
Subject: c
Date: Sat, 20 Apr 2019 13:25:00 +0100
d
.
Честно говоря, это едва ли действительный адрес электронной почты. У него есть два дополнительных поля к минимуму согласно https://tools.ietf.org/html/rfc5322#page-21 Это от, до, предмет, дата и тело. Если что-то из этого отсутствовало, я думаю, ваш провайдер электронной почты должен отклонить их.
Фактическое тело, которое я отправил, чтобы проверить это с моей реальной электронной почтой и провайдером (dreamhost), составило 151 байт, потому что электронные письма были реальными, а домен был длиннее символа.
Более интересно, что конверт взял это до 468 байт (для реальной электронной почты с аутентификацией, не включающей ответы сервера), но теоретически может быть меньше (146 байт с односимвольным доменом без расширения, только для лабораторных и внутренних)
EHLO c
HELO c
AUTH LOGIN
a
b
MAIL FROM: <a@b>
RCPT TO: <a@b>
DATA
From: <a@b>
To: <a@b>
Subject: c
Date: Sat, 20 Apr 2019 13:25:00 +0100
d
.
QUIT
Это <1 КБ, поэтому подходит для встроенных систем, но при этом отсутствуют транспортные издержки и некоторые функции, такие как поддержка нескольких частей. </p>
Все, что вам нужно сделать, чтобы использовать это, это снабдить себя библиотекой сокетов для открытия соединения, кодировщиком base64 (для простого пользователя + пароль), утилитой генерации строки даты и элементарными навыками командной строки.
Это ни в коем случае не полный ответ, но он отвечает на два случая с необходимыми предостережениями для понимания начинающего, разбирающегося с технологией.