По своей сути SMTP - это просто текстовый протокол без реальной проверки. Вот пример:
=== Trying g3.example.net:25...
=== Connected to g3.example.net.
<- 220 home.example.net ESMTP Exim 4.68 Thu, 07 May 2009 11:03:21 -0400
-> EHLO g3.example.net
<- 250-home.example.net Hello g3.example.net [192.168.0.4]
<- 250-SIZE 52428800
<- 250-PIPELINING
<- 250-AUTH CRAM-SHA1 CRAM-MD5 MSN
<- 250-STARTTLS
<- 250 HELP
-> MAIL FROM:<jj33@g3.example.net>
<- 250 OK
-> RCPT TO:<jj33@g3.example.net>
<- 250 Accepted
-> DATA
<- 354 Enter message, ending with "." on a line by itself
-> Date: Thu, 07 May 2009 11:03:21 -0400
-> To: jj33@g3.example.net
-> From: jj33@g3.example.net
-> Subject: test Thu, 07 May 2009 11:03:21 -0400
-> X-Mailer: swaks v20070921.0-dev jetmore.org/john/code/#swaks
->
-> This is a test mailing
->
-> .
<- 250 OK id=KJA4HL-0006M6-8T
-> QUIT
<- 221 home.example.net closing connection
=== Connection closed with remote host.
Строка «MAIL FROM:» определяет отправителя конверта SMTP, а From: определяется в сообщении DATA. Есть способы защиты от этого, но они определены в логике почтового сервера, а не в самом протоколе.
Например, я, как поставщик почты, может потребовать от пользователя аутентификации с использованием имени пользователя типа user @ domain. Тогда мой почтовый сервер может потребовать, чтобы любая отправляемая им почта имела отправителя конверта и заголовок From:, который соответствует пользователю, которого они аутентифицировали. Дополнительные технологии, такие как DKIM и SPF, также могут помочь в этой области.