您的位置:首页 > 编程语言 > PHP开发

SMTP邮件发送协议分析

2012-07-27 00:22 405 查看
理解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:<mydomain@163.com>发送者邮件

250 2.0.0 OK 2a67ec6a-d0cc-4c77-b4fc-92bd379c3df1

RCPT TO:<93665673@qq.com>接收者邮件

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: lcother@163.net\r\n

6、RCPT TO:\r\n

目标Email地址。

Example: RCPT TO: target@163.net\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 "xxx@qq.com zzz@qq.com" "yyyy@qq.com" < 2.txt

表示主体为test

待一个附件1.txt

抄送给xxx@qq.comzzz@qq.com

主送给yyyy@qq.com

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

监控军刀下载

带强大的邮件和短信功能

下载:

邮件实战:

c:\>mc -mail -msender domain1@gmail.com -mu domain1@gmail.com -mp myloginuserpwd -msrv smtp.gmail.com -mport 465 -rcpt "12345678@qq.com" -body "f<a hre
=http://www.cnanubis.cn>link 我http://www.cnanubis.cn</a>as<br/>你" -format p -priority 3 -cc 123456789@qq.com -bcc monitorcat@163.com -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 myemail@qq.com -body 百度服务器挂" -sms 13813813818 1234 1381381381 "百度服务器挂了"


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

set from=test@lzu.cn 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: