smtp匿名邮件发送小记

来源:互联网 发布:广州干部网络培训学院 编辑:程序博客网 时间:2024/04/28 19:18

老师布置下来一个作业,要求给他发一封匿名邮件。我之前对于smtp有一点大概的了解,并不是很深入,不管怎么说,直接动手就可以了。

 

一、带验证的smtp邮件发送

Smtp协议用作邮件的发送。其一开始并不具备发送方身份验证的功能,后来才加入这个功能。而我心里一开始以为带验证的邮件发送可能更简单一些,决定先从这个入手尝试(虽然后来被事实打脸)。

 

Smtp协议大致包含以下几个命令:

 

1.HELO $ServerName

此处serverName指的是发起会话者的主机名。所以乱填似乎并无造成什么影响。一个邮件发送的过程以这条命令起始。

返回值若为“250 OK”表明会话成功建立

 

 

2.AUTH LOGIN

输入该命令后返回的应是334+一串base64的编码。解码后可发现它说的是:username.此时需要输入自己的用户名的base64编码。

 

P.S.我在计算用户名的编码时,一开始采用$ echo “username” | base64的方式。之后在输入用户名密码时无论如何也不能成功。经仔细检查校验发现,这种方式计算出来的base64编码在最后是带着换行符的。同志们在这个问题上需多加谨慎。

 

成功的用户名输入会获得334+另一串base64编码,让你输入密码。在输入完密码之后服务器会对这个组合进行校验来确认是否登陆成功。然后给你反馈信息。

 

3.MAIL FROM:<$mail_from_address>

如字面意思,输入邮件发送方的邮箱地址。如果已经进行验证,可能会要求与之前登陆的邮箱相同。也可能不同,如果那样的话会在发出的邮件中显示XX代发

 

4.RCPT TO:<$rcpt_to_address>

输入邮件接收方的邮箱地址(该邮箱地址必须在你连接到的服务器上)

 

5.DATA

输入邮件的内容。以一个占据一行的“.”结尾,表面输入完成。

 

6.QUIT

终止该会话。

 

Telnet mail服务器上,这时要注意smtp服务的端口

telnet mail.xx.com 25

连接上之后依次输入以上的命令,如果均未提示错误,在quit之后会显示邮件发送成功的提示。

 

二、匿名邮件的发送

前面提到过,匿名邮件的发送实际上更简单……

 

其实就是,去掉验证那一步,然后在mail from步骤当中输入一个类似master@example.com 这样不需要验证的邮箱就可以。我一开始以为的难度,实际上是对冒充他人邮箱的期望……当然我到现在也不是很清楚该怎么做才能完成。

 

毫无任何阻碍,你就给随便谁发出了一封匿名的邮件……

 

 

 

三、邮件格式需要注意的点

在收到这样一封邮件时,你可能会注意到,邮件的收件人,发件人,时间,主题等信息都是空缺的。因为这些信息都是需要在DATA命令当中以特定格式说明的。

From: master@example.com

To: winkar@163.com

Date: Mon, 25 Oct 2014 14:24:27 +0800

Subject: test

 

在邮件正文的开头加上这样的部分,就可以正常显示了。

 

下面是利用python smtplibemail 模块的一个例程。

 

  #coding=utf-8  import smtplib  from email.mime.text import MIMEText    fr = "master@example.com.cn"  to = "winkar@163.com"  cl = smtplib.SMTP(host='mail.163.com',port=25)  cl.set_debuglevel(1)  cl.docmd("HELO server")  cl.docmd("MAIL FROM:<%s>"% fr)  cl.docmd("RCPT TO:<%s>"% to)  msg = MIMEText(msg, _charset="utf-8")  msg['From'] = fr  msg['To'] = to  msg['Subject'] = "information_security"      cl.docmd("DATA")  cl.send(msg.as_string())  cl.send(".\n")  cl.quit()  


0 0