我们都习惯了用邮件客户端软件或者登录到电子邮件站点进行收发邮件,现在尝试一下使用 Windows 自带的 Telnet 程序手工地发送一封简单的邮件,以此来稍微明白关于邮件发送的一些知识。
现在 E-mail 的传输一般都使用了 ESMTP (扩展的简单邮件传输协议),SMTP 中定义了 18 条命令,用于发送一封邮件。但是作为一个测试实验的话,我们只需要其中最基本的6条命令。
如下(其中的<Space>代表一个空格,<CRLF>代表回车加换行,即写代码时的 \r\n ):
ehlo<Space>主机名<CRLF>
SMTP 邮件发送程序与SMTP邮件接收程序建立连接的第一条必须的命令,主机名是当前邮件发送者的主机名;
auth<Space>login<CRLF>
现在一般的邮箱都需要进行用户名、密码验证,而且SMTP 邮件服务器一般都使用 Login 验证方式,因此就不用考虑其他两种验证方式了;
mail<Space>from:发送人邮箱地址<CRLF>
从命令中很明显地看出来 mail 命令用于指定邮件发送者的邮箱地址;
rcpt<Space>to:收件人邮箱地址<CRLF>
同理,rcpt 命令用于指定邮件接收人的邮箱地址;
data<CRLF>
data 命令用于表示该命令之后的所有内容、数据都将被作为邮件的相关内容,直到遇到<CRLF>.<CRLF>标识符,即一个句号“.”结束邮件的发送内容;
quit<CRLF>
该命令结束邮件发送过程,关闭本机与SMTP 邮件服务器的网络连接。
出处:
======================================================
实例一
telnet常规发邮件
1.连接→telnet smtp.163.com 25
回显"220"2.报名字(随便写)→helo 163.com
回显"250 ok"3.登陆模式(这时选一般登陆模式)→AUTH LOGIN
回显"334 dXNlcm5hbWU6"(注:这时的用户和密码都为Base64编码后的字符4.用户名****
回显"334 UGFzc3dvcmQ6"5.密码****
回显"235 Authentication successful" 表示验证通过6.发件人→mail from: <>
回显"250 Mail OK"7.收件人→rcpt to: <>
回显"250 Mail OK"8.开始写正文→data
输入正文内容就ok,正文要符合MIME规范例子:
From: ←电子邮件的发信人To: ←电子邮件的收信人Cc: ←接收通过抄送方式发送的邮件的收件人Subject: test ←电子邮件的主题MIME-Version: 1.0 ←MIME 协议的版本Content-Type: text/plain ←邮件格式texthello vkill ←内容当行输入. 回车,回显"250 OK"发送成功9.断开连接→quit
一般这种发送邮件的方式都可以在网上大把大把的搜到的,再有不明白的自己其网上看别人的详细介绍。
出处:
1.在cmd里输入
telnet mail.xxx.com 25一般来说,如果mail.xxx.com存在,并且port:25有打开,就能连接成功。2.跟服务器打招呼
helo mail.xxx.com服务器应该返回250如果服务器smtp需要验证,进行第3步,否则到第4步3.输入
auth login会一次提示你334 VXNlcm5hbWU6和334 UGFzc3dvcmQ6输入用户名的base64编码的字符串,再enter再输入密码的base64编码的字符串,再enter注意这里的可以 网上找在线base64加密码的网页对你的用户名和密码加密smtp认证通过后会显示235 2.0.0 Authentication successful4.写信
输入发信人mail from: <>和输入收信人rcpt to: <>分别是发件人,收件人如果正常都应该返回2505.输入信件内容
DATA从这里开始写信的内容subject:test send mailtest email,receive.//说明:这个英文的点号不能漏掉,表示信内容的结束会返回
250 2.0.0 Ok: queued as 93223136C8E退出邮件QUIT出处:======================================================
实例二
企业内部网络发邮件
在公司或企业内部,往往都有自己的邮件服务器或使用Exchanger服务器,外部免费邮件服务器网站或端口经过了拦截或屏蔽。
这样我们就没法使用外部服务器,所以我们需要先找到内部服务器再发邮件,当然,你也可以根据Outlook配置查找。C:\>nslookup
Default Server: ns.hncsptt.net.cn Address: 202.103.96.68 //开始运行nslookup,并且默认的DNS服务器为该IP地址。 >set type=mx //设置显示类型为MX纪录。 >domainname.com //查询domainame.com 的MX纪录。 domainname.com MX preference = 10, mail exchanger = mail.domainname.com mail.domainname.com internet address = xxx.xxx.xxx.xxx >exit很快通过上面的命令就查出了domainname.com这个域的STMP服务器地址为xxx.xxx.xxx.xxx
好了,让我们继续, C:\>telnet xxx.xxx.xxx.xxx 25 会出现: 220 mail.domainname.com 在这里也可能是别的,因为可能默认域不是domianname.com的域,而且其他的,但不管这些,你只要看到220这个数字就行了。 现在再接着输入命令: HELO domain.com 返回: 250 mail.domainname.com Hello [x.x.x.x] 这里表示和邮件服务器握手成功,其中x.x.x.x就是你的IP地址。 好了,我们冒充的最关键地方开始了: MAIL FROM: [email=[ft=#fff9ba,,]webmaster@domain.com]webmaster@domain.com[/email] 250 OK 这里告诉服务器,我们将用 [email=[ft=#fff9ba,,]webmaster@domain.com]webmaster@domain.com[/email] 这个电子邮件来发送这封电子邮件,很可惜任何的SMTP服务器都不会验证这个电子邮件的真实性,所以这里就被服务器给认可了,于是服务器返回250 OK,表示接受,继续等待下面的命令。 RCPT TO: [email=[ft=#fff9ba,,]username@domainname.com]username@domainname.com[/email] 250 OK 告诉服务器邮件发送给 [email=[ft=#fff9ba,,]username@domainname.com]username@domainname.com[/email] ,但是服务器在这里仅仅只检查domainname.com这个域是不是在自己的转发列表里,由于我们是直接查的dommainname.com这个域的SMTP服务器,所以当然也绝对会在列表了,所以服务器的返回OK,而不会做更多的验证。 DATA 354 Start mail input; end with <CRLF>.<CRLF> 这里输入DATA,告诉服务器要开始输入邮件内容了,邮件服务器会返回354信息,以及上面说的邮件以“.”结束。 开始输入邮件内容了,但一般邮件都会有邮件头,为了更真实的伪造邮件,我们可以按下面的输入: From: [email=[ft=#fff9ba,,]webmaster@domain.com]webmaster@domain.com[/email] //让Outlook,foxmail等这样的客户端工具显示发送者为 [email=[ft=#fff9ba,,]webmaster@domain.com]webmaster@domain.com[/email] To:username@domainname.com //同样让客户端工具显示接收者为 [email=[ft=#fff9ba,,]username@domainname.com]username@domainname.com[/email] Subject: send anonymous mail //邮件主题 Test //邮件内容,这里想怎么写就怎么写了。 . //最后输入一个“.”结束邮件。 250 send OK服务器返回250,说邮件发送成功,
备注:为企业邮箱局域名加上TXT解析记录,可以防止一此非正常手段发送的邮件,也避免别人盗用自己的邮件服务器来发送垃圾邮件! TXT记录,如: ABC.COM V=SPF.include.XXXX. ~ALL 出处: