使用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这种测试词汇是没有问题的。

下图是完整的成功发送邮件的例子:

发布了5 篇原创文章 · 获赞 0 · 访问量 1223

猜你喜欢

转载自blog.csdn.net/weixin_40908748/article/details/88652477