简介
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,尽管邮件服务器可以用SMTP发送、接收邮件,但是邮件客户端只能用SMTP发送邮件,接收邮件一般用IMAP 或者 POP3 。邮件客户端使用TCP的25号端口与服务器通信。
SMTP在1982年首次被定义在 RFC 821 ,在2008它被更新为扩展的SMTP协议,补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。
SMTP通讯描述
当用户需要发邮件时候,邮件发送者(sender-SMTP)建立一个与邮件接收者(receiver-SMTP)通信的通道,发送者发送SMTP命令给接收者,接收者收到后对命令做回复。
通信通道被建立后,发送者发送 MAIL 命令来指定发送者的邮件,如果接受者接收这个邮件,就回复 OK ,接着发送者发送 RCPT命令来指定接收者的邮箱,如果被接收同样回复OK,如果不接受则拒绝(不会终止整个通话)。接收者邮箱确定后,发送者用DATA命令指示要发送数据,并用一个 . 结束发送。如果数据被接收,会收到OK ,然后用QUIT结束会话。
常用命令
1 telnet smtp.sina.com 25 // 链接到smtp服务器
2 ehlo // 链接成功,向服务器发送任意字符,确认链接
3 AUTH // 加参数login,回车后输入base64编码后的账号和密码,登录SMTP
4 mail from: // 开始新的邮件事务,加发送者邮箱参数
5 rcpt to: // 参数接收者邮箱,添加多个邮箱,可多次执行此命令
6 data // 开始编写邮件,“”.“” 为结束编写并提交到SMTP服务。
7 . // 结束邮件编写
8 quit // 断开连接
使用示例
telnet smtp.sina.com 25 //1 telnet
Host 'smtp.sina.com' resolved to 123.126.45.161.
Connecting to 123.126.45.161:25...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
220 smtp-97-23.smtpsmail.fmail.bx.sinanode.com ESMTP
ehlo cup //2 ehlo
250-smtp-97-23.smtpsmail.fmail.bx.sinanode.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-STARTTLS
250 8BITMIME
AUTH LOGIN //3 AUTH
334 VXNlcm5hbWU6
bmaaaaaaaaaaaaaaaxxxxxxxxQ== //4 编码后的邮箱登录账号
334 UGFzc3dvcmQ6
Maaaaaaaaaaaaaaaaaaaaaa //5 编码后的邮箱登录密码
235 OK Authenticated
mail from: <xxxxxxxxxx@sina.com> //6 mail from: <>
250 ok
rcpt to: <xxxxx@qq.com> //7 rcpt to: <>
250 ok
data //8 data
354 End data with <CR><LF>.<CR><LF>
From: xxxxxxxxxx@sina.com (我是谁发送的) // 输入内容开始
To: xxxx@sina.com (我是发送给谁)
Cc: xxxxxx@qq.com (我是抄送)
subject: xxxxx (我是主题)
(这里要有一个空行)
Hello, nercis.
This is a test message.
.... // 内容结束
. //9 . 提交
250 ok queue id 91604954919510
quit //10 quit
221 smtp-97-23.smtpsmail.fmail.bx.sinanode.com
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(smtp.sina.com:25) at 15:33:53.
C++代码示例
libcurl代码示例
详细参考: