如何处理电子邮件中的“发件人”字段,并使“收件人”用户看到与实际不同的内容。
例:
真的来自
From: TStamper@yahoo.com
但他们看到
From: Tremayne "Top Dog" Stamper
我从操作SMTP时就已经听说过它,但是真的不确定它的准确性或如何实现
如何处理电子邮件中的“发件人”字段,并使“收件人”用户看到与实际不同的内容。
例:
真的来自
From: TStamper@yahoo.com
但他们看到
From: Tremayne "Top Dog" Stamper
我从操作SMTP时就已经听说过它,但是真的不确定它的准确性或如何实现
Answers:
从根本上讲,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之类的其他技术也可以在此领域提供帮助。
这里有几件不同的事情要考虑。如果只想显示其他名称或电子邮件地址,请将邮件的“发件人”标头(来自地址的邮件)设置为电子邮件地址,并在方括号中显示名称:
发件人:Joe示例<joe@example.com>
请记住,消息标题中的“ from”行仅用于显示目的。实际的路由由SMTP信封地址完成。这就是SMTP服务器实际用于在服务器之间传输邮件的方式。这可以与消息“ from”标头不同。如果您有一个自定义SMTP引擎,只需让它在SMTP信封中使用一个地址,然后在实际邮件的“发件人”标头中使用另一个地址即可。
您可能有很多正当的理由要这样做,但请不要出于邪恶目的。
请注意,可以在RFC 5322-A.2.1中找到正确的语法示例
“真正的发件人”地址来自SMTP对话中的“发件人:”对话框。
“伪造”来自利用电子邮件客户端中的常规做法,即显示SMTP对话的“数据”部分中列出的各种标头字段。例如:
# telnet mail.example.com 25
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
helo fakeserver
250 mail.example.com
mail from: real@example.com
250 2.1.0 OK
rcpt to: real@example.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
from: fake@example.com
to: you@example.com
subject: This is a subject
This is the body.
.
250 2.0.0 Ok: queued as 90D0F95A06
quit
221 2.0.0 Bye
Connection closed by foreign host.
#
如果您在“数据”部分中省略了“从:”和“至:”行,则它将显示实际的信封发件人和收件人。
请注意,垃圾邮件过滤器通常会寻找这些技巧,它们肯定不会使您成为永久朋友。此外,这并不适用于所有邮件客户端(只是最常见的客户端)。
这是我的2c代码-用C#编写
public static void SendSpam(string message, string to)
{
System.Net.Mail.MailMessage myMessage = new System.Net.Mail.MailMessage("Fake Name", to);
myMessage.Subject = "SPAM";
myMessage.Body = message;
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("mail.mailserver.com", 25);
System.Net.NetworkCredential c = new System.Net.NetworkCredential("realusername@mailserver.com", "realpassword");
client.Credentials = c;
client.Send(myMessage);
}