上期学习:UTF-8与UTF-16
既然目的是要非常帅气的发邮件,自然不能使用平常使用的网页客户端、PC客户端。
准备帅气的工具:telnet
邮件服务器:smtp.sina.cn,端口:25
第一步:连接邮件服务器
$ telnet smtp.sina.cn 25
...
... 220 smtp-97-23.smtpsmail.fmail.bx.sinanode.com ESMTP
响应代码220:代表邮件服务就绪。协议是ESMTP:SMTP扩展协议
第二步:和邮件服务器打招呼:你好
EHLO sina
... 250-smtp-97-23.smtpsmail.fmail.bx.sinanode.com
... 250-AUTH LOGIN PLAIN
... 250-AUTH=LOGIN PLAIN
... 250-STARTTLS
... 250 8BITMIME
响应代码250:表示请求动作完成
第三步:认证邮件服务器账号
AUTH LOGIN
... 334 VXNlcm5hbWU6
响应代码334:等待输入信息
继续输入账号的base64编码
dGVzdEBzaW5hLmNu
... 334 UGFzc3dvcmQ6
继续输入密码的base64编码
MTIzcXdlYXNk
... 235 OK Authenticated
响应代码235:认证成功
第四步:设置发件人、收件人或者抄送人
MAIL FROM:<test@sina.cn>
RCPT TO:<test@qq.com>
RCPT TO:<test1@sina.cn>
RCPT TO:<test2@qq.com>
收件人与抄送均使用RCPT TO设置。每输入一条会响应 250 ok。
第五步:设置邮件内容
DATA
... 354 End data with <CR><LF>.<CR><LF>
代码响应354:数据起始,以<CR><LF>.<CR><LF>为结束符号
继续输入
MIME-Version:1.0
Content-Type:text/html;charset=utf-8
Content-Transfer-Encoding: BASE64
From:=?utf-8?B?5rGf5rmW5a6J5b6X5L6/55u45b+Y?= <test@sina.cn>
To:<test@qq.com>;<test1@sina.cn>
Cc:<test2@qq.com>
Subject:=?utf-8?B?5qCH6aKY?=
PGEgaHJlZj0iaHR0cHM6Ly9tYWlsLnNpbmEuY29tLmNuIj7msZ/muZblronlvpfkvr/nm7jlv5g8L2E+
.
数据header部分定义协议版本,内容类型,与传输编码。发送人,收件人,抄送人,主题和正文,最后是数据结束符号。
From 发件人可配置 名称 <邮件>
To 收件人,多人使用分号分隔
Cc 抄送人,多人使用分号分隔
Subject 主题
Content-Transfer-Encoding: BASE64 使用base64编码传输内容,正文传输时需要base64编码,例子中的内容为<a href="https://mail.sina.com.cn">江湖安得便相忘</a>
主题与发送人中是一个固定的模式 =?utf-8?B?xxxxxx?= , xxx部分是base64编码的数据,目的是解决中文乱码。
最后:结束
QUIT
响应代码221:服务关闭
查看邮件是否已经发出去了呢?
【文章参考】
https://tools.ietf.org/html/rfc1341
https://tools.ietf.org/html/rfc1869
https://tools.ietf.org/html/rfc2821
https://tools.ietf.org/html/rfc2554