我如何操纵电子邮件中的“发件人”字段并让“收件人”用户看到与实际不同的内容。
例子:
确实来自
From: [email protected]
但他们看到
From: Tremayne "Top Dog" Stamper
我听说这是通过操纵 SMTP 实现的,但我真的不确定这有多准确,或者如何做到
答案1
从本质上讲,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:<[email protected]>
<- 250 OK
-> RCPT TO:<[email protected]>
<- 250 Accepted
-> DATA
<- 354 Enter message, ending with "." on a line by itself
-> Date: Thu, 07 May 2009 11:03:21 -0400
-> To: [email protected]
-> From: [email protected]
-> 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 类型的用户名进行身份验证。然后我的邮件服务器可能要求他们发送的任何邮件都具有与他们验证身份的用户相匹配的信封发件人和发件人:标头。DKIM 和 SPF 等其他技术也可以在这方面提供帮助。
答案2
这里有几个不同的事情需要考虑。如果您只想显示不同的名称或电子邮件地址,请将邮件的“发件人”标题(邮件发件人地址)设置为带有括号中显示名称的电子邮件地址,如下所示:
来自:Joe Example <[电子邮件保护]>
请记住,邮件头中的“发件人”行仅用于显示目的。实际路由由 SMTP 信封地址完成。这是 SMTP 服务器实际用来在服务器之间传输邮件的地址。这可能与邮件“发件人”头不同。如果您有自定义 SMTP 引擎,只需让它在 SMTP 信封中使用一个地址,在实际邮件的“发件人”头中使用另一个地址即可。
您可能出于多种正当理由想要这样做,但请不要将其用于邪恶目的。
请注意,可以在以下位置找到正确的语法示例RFC 5322 - A.2.1
答案3
telnet some_smtp_server.com 25
ehlo whatsup
mail from: [email protected]
rcpt to: [email protected]
data
your message here
end with a dot on a single line like this:
.
当然,您需要一个允许中继的 SMTP 服务器,这几乎不可能找到...或者自己动手(只是不要使用这些知识来发送垃圾邮件!)。
答案4
是的,这是通过手动设置 SMTP 标头来实现的,而且很容易实现。谷歌搜索。但不要被发现发送垃圾邮件......