SMTP邮件发送协议分析

理解SMTP发送数据的格式, 知道怎么客户端和服务器段怎么交互 那么就很容易的自己写出一个邮件客户端。最后附带了 整理过的邮件客户端

C语言版。可以直接加入自己的项目中。。


直接使用命令行演示: telnet smtp.163.com


220 hz-b-163smtp2.163.com SMTP Server for Netease [466] 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
EHLO smtp.163.com//表示连接主机
250-hz-b-163smtp2.163.com
250-mail
250-PIPELINING
250-8BITMIME
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 STARTTLS 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
AUTH LOGIN 表示进行认证
334 VXNlcm5hbWU6 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
bW9uaXRvcmNhdEAxNjMuY29t    用户名 base64加密
334 UGFzc3dvcmQ6 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
cGFzc3cwcmQ=                   密码base64加密
235 OK, go ahead (#2.0.0) 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
MAIL FROM:<[email protected]>发送者邮件
250 2.0.0 OK 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
RCPT TO:<[email protected]>接收者邮件
250 2.0.0 OK 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
DATA表示输入数据
354 Start mail input; end with <CRLF>.<CRLF> 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1
???????????????? 这几行是发送的内容
fjlajd
fads

.                       .  点表示开始发送
250 2.0.0 OK 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1



ESMTP协议如下:


Socket连接后,按 ESMTP 协议通讯(注意每条命令结尾符“回车\换行\.\回车\换行”结束):
1、EHLO \r\n
        这条命令可以不要,但是按照标准的写法,还是加上好。
        Example: EHLO smtp.163.net\r\n
2、AUTH LOGIN\r\n
        告诉服务器,要进行验证了。
3、Base64_Username\r\n
        发送经过 Base64 编码的用户名给服务器。
4、Base64_Password\r\n
        发送经过 Base64 编码的密码给服务器。
5、MAIL FROM:\r\n
        发送者的Email地址。
        Example: MAIL FROM: [email protected]\r\n
6、RCPT TO:\r\n
        目标Email地址。
        Example: RCPT TO: [email protected]\r\n
7、DATA\r\n
        开始传送数据。
8、发送数据\r\n.\r\n
        注意:SMTP协议只发送信息,至于如何区分CC、BCC、Subject、Body等不属于SMTP的范围,详情请查看RFC文档MAIL格式部分
        简单说一下MAIL格式:Sunject:<主题>\r\n\r\n<内容>,还有好多……
        返回值为“250 ***”表示正常,同时***里含有MessageID等信息(前面的命令都有相应的返回信息)
9、QUIT\r\n
        OVer....

 

TO是你发送给谁:表示你要把这个邮件发给谁
CC是抄送 Carbon Copy, 抄送:表示你告诉谁我把邮件发给某些人了
BCC是密送 Blind Carbon Copy,隐蔽副本,别的人不知道你发送给她了,只有他自己知道


一般使用的邮件服务器和端口号

smtp.gmail.com

587   USE_TLS 

465  USE_SSL
smtp.163.com 

       25     USE_TLS|NO_SECURITY

smtp.live.com

      25 USE_TLS

smtp.aol.com

     587    USE_TLS

plus.smtp.mail.yahoo.com

    465   USE_SSL

以上  NO_SECURITY=0, USE_TLS =1,USE_SSL=2



linux下的mailx发送带附件多人抄送的邮件,例子:

mailx -s "test" -a 1.txt -c "[email protected] [email protected]" "[email protected]"  < 2.txt

表示主体为test

待一个附件1.txt

抄送给[email protected][email protected]

主送给[email protected]

并把2.txt的内容当做邮件正文发出

 

监控军刀下载

带强大的邮件和短信功能

下载:

邮件实战:

c:\>mc -mail -msender [email protected] -mu [email protected] -mp myloginuserpwd -msrv smtp.gmail.com -mport 465 -rcpt "[email protected]" -body "f<a hre
=http://www.cnanubis.cn>link 我http://www.cnanubis.cn</a>as<br/>你" -format p -priority 3 -cc [email protected] -bcc [email protected] -sec 2 -attach "c:\atlog.txt,c:\tootx.txt,c:\test.h2.db,c:\说明.txt"

  短信 实战:

mc -sms 138138138 飞信密码 接收者手机号码  发送的内容


加密密码

mc -v -sms 13813813810 -use64 d3VodWFsb25nMTMxNA= 1399999999 "<" "c:\msg.txt"

先使用  mc -to64 xxxxxx   生成HEX


端口监控并发送消息通知 实战

mc \\baidul.com -p 80 -t 10000 -flag 0 -a "cmd.exe /c mc -mail  -rcpt [email protected] -body 百度服务器挂" -sms 13813813818 1234 1381381381 "百度服务器挂了"




如果要用自己的邮箱账号发送邮件,需要写个配置文件,在用户主目录下编辑.mailrc,内容是:

set [email protected] smtp=smtp.lzu.cn
set smtp-auth-user=your_E-mail_address smtp-auth-password=your_password
set smtp-auth=login
在我粘过来之前有说明的,,这个,没说明也看得懂得懂得吧

在网上搜索的时候还说什么uuencode的什么的,,我就没弄明白怎么搞,

就这样了。。。


reference: http://www.codeproject.com/Articles/28806/SMTP-Client

官方的列子有点问题。

修改后的源码下载地址:  http://download.csdn.net/detail/wuhualong1314/4456700

你可能感兴趣的:(c,.net,服务器,email,login,reference)