使用telnet通过SMTP协议发送邮件
1.确认本地电脑的telnet服务是否打开
2.查看邮箱授权码是否设置
在图片中有提示,授权码是用于登录第三方邮件客户端的专用密码,这样可以保护自己的密码不被泄露,还能委托其他客户端进行邮件的操作。
如果没有授权,在登录时会返回550错误,如下图
3.以上设置完成后,即可发送邮件了。发送邮件的一般格式如下:
客户端: telnet smtp.126.com 25 // 25是端口号
服务器端: 220 ...
客户端: helo 发送人邮箱地址
服务器端(在服务器中找到了这个邮箱地址): 250 OK
客户端: auth login // 登录账号,如果没有登录账号,在试图发送邮件的时候会返回553 authentication is required的错误
注意一点,用户名和密码都是Base64加密的(包括服务器给出的提示
),可以用java方法快速得到加密字符串,具体代码如下:
public static void main(String[] args) throws UnsupportedEncodingException
{
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "加密的字符串";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
}
服务器端(验证用户名和密码都正确):235 authentication successful
客户端(发件人邮箱地址): mail from:<[email protected]>
服务器端: 250 mail ok
客户端(收件人邮箱地址): rcpt to:<[email protected]>
服务器端: 250 mail ok
客户端(发送邮件的内容): data
服务器端(提示客户端的书写格式,最后换行,以"."结尾):354 End data with <CR><LF>.<CR><LF>
客户端:
from:<[email protected]> // 发件人的邮箱地址
subject:xxxxxxxxx // 标题
(空行)
……(具体内容)
. // 结束
服务器端:
①发送成功:250 Mail OK queued as smtp4,......
②发送失败:最常见的错误就是554。导致这个错误有以下几个原因:
1)发送内容中没有写from和subject
2)subject 和具体发送内容之间没有空行
3)在写from和拼写subject的时候写错了。这个时候要注意了,就算删了改成正确的,也会报554错误。举个例子,在控制台上想输入test,结果错打成tet,这个时候删除t重新打成test,虽然在cmd上显示正常了,但是服务器那边接收到的却是tetst。顺便说一句,之前报错的时候看到网上一些文章说554错误是因为内容中有不合法的东西导致的,我没有尝试敏感词汇,但是test这种测试词汇是没有问题的。
下图是完整的成功发送邮件的例子: