如此简单的协议,被网上各路大神描述的都用不来了。先说说几个客户端常用命令:
HELO hostname: 与服务器打招呼并告知客户端使用的机器名字,可以随便填写
MAIL FROM: sender_id : 告诉服务器发信人的地址
RCPT TO: receiver_id : 告诉服务器收信人的地址
DATA : 下面开始传输信件内容,且最后要以只含有.的特殊行结束
RESET: 取消刚才的指令,从新开始
VERIFY userid: 校验帐号是否存在(此指令为可选指令,服务器可能不支持)
QUIT : 退出连接,结束
1. HELO 语句
这是网上的原文,其实很容易犯错,我就犯过如下错误:
1. HELO hostname: tester
2. HELO: tester
3 HELO tester:
但最后测试成功后才发现,其实用法很简单:
HELO hostname
红色字才是要用户自己填的,其他都不需要。
其中HELO hostname 的hostname是随便都行,没有要求的。
另外要注意的是,与SMTP服务器连接后,首先要使用 HELO 或 EHLO,注意大写哦。同时如果你是用 socket 给服务器发命令时,注意你的输入应该如下:
"EHLO test /r/n" 而不是 "EHLO test"。命令中不加 /r/n 会怎样? 我的血肉教训是收不到服务器的应答,也就是recv()函数收不到数据,然后就死等。为搞明白这个问题,一下午又浪费了。
2. AUTH 语句
用以下格式:
1) 发送 "AUTH LOGIN\r\n"
返回 334
2) 再发直接发你连接的邮箱服务器的账号 useName, 注意这里需要用 base64 编码一下,记住在字符串的尾部要加“\r\n”
返回 334
3) 再发直接发你连接的邮箱服务器的密码 password, 注意这里需要用 base64 编码一下,记住在字符串的尾部要加“\r\n”
返回 235 Authentication successful
2. MAIL FROM 语句
用以下格式:
"Mail From :<xxx@162.com>\r\n"
返回 250 OK
3. RCPT TO 语句
用以下格式:
"RCPT TO:<xxx@162.com>\r\n"
返回 250 OK
4. DATA 语句
这个语句是告诉服务器,我要开始发邮件正文了。
用以下格式:
"DATA \r\n"
返回 354 Start mail input; end with <CRLF>.<CRLF>然后就可以发邮件的内容了。记住邮件最后以 /r/n./r/n 结束
返回 250 OK
这时邮件已经发出
5. QUIT 语句
用以下格式:
"QUIT \r\n"
到这里,你的邮件就发出去了。