邮件发送实现原理

邮件发送实现原理:

邮件服务器和电子邮箱:

邮件服务器:
要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。
这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
电子邮箱:
电子邮箱(E-mail地址)的获得需要在邮件服务器上进行申请 ,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个帐号分配一定的空间,用户从而可以使用这个帐号以及空间,发送电子邮件和保存别人发送过来的电子邮件。

邮件传输协议和邮件服务器类型:

SMTP协议(发送邮件)
用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。
因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)
POP3协议(接收)
同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。
因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)

手工演示电子邮件的发送:

  • 准备实验环境
  • 提前在sohu 和sina上注册一个免费帐号
  • 获取smtp和pop3服务器的名称
  • sina或 sohu会在其帮助中心里提示管理当前注册帐号的邮件服务器的主机名。
  • 编写base64编码程序对用户名和密码进行编码。
  • 手工使用SMTP协议发送电子邮件
  • 手工使用POP3协议接收电子邮件

还参考了一篇文章:https://www.jianshu.com/p/0ff2b9237315

win10启用telnet:

https://jingyan.baidu.com/article/3ea51489ba79e252e61bba97.html

telnet smtp.sina.cn 25

220 smtp-5-122.smtpsmail.fmail.xd.sinanode.com ESMTP
ehlo
250 smtp-5-122.smtpsmail.fmail.xd.sinanode.com
auth login
334 VXNlcm5hbWU6
emhlbmdqaWFuaV8xOTk1QHNpbmEuY29t
334 UGFzc3dvcmQ6
邮箱密码的64位编码
235 OK Authenticated
mail from:[email protected]
250 ok
rcpt to:[email protected]
250 ok
data
354 End data with .
**from:**[email protected]
**to:**[email protected]
subject:hello

Hello, xsm-ue!

.

250 ok queue id 7343365767177
quit
221 smtp-5-122.smtpsmail.fmail.xd.sinanode.com

其中所遇到的错误:

451 Service temporarily unavailable.

发信账号频率超限

参考:https://help.aliyun.com/knowledge_detail/44499.html

553 Envolope sender mismatch with login user..

不匹配

参考:http://www.magicwinmail.com/faq_setup.php

502 unimplemented (#5.5.1)

java发送邮件:

public class MailDemo1 {
    public static void main(String[] args) throws Exception{
       Properties prop=new Properties();
       prop.setProperty("mail.transport.protocol","smtp");//协议
        prop.setProperty("mail.smtp.host","localhost");//主机名
        prop.setProperty("mail.smtp.auth","true");//是否开启权限控制
        prop.setProperty("mail.debug","true");//如果设置为true则在发送邮件时会打印发送时信息
        //创建程序到邮件服务器之间的一次会话
        Session session=Session.getInstance(prop);
        //获取邮件对象
        Message msg=new MimeMessage(session);
        msg.setFrom(new InternetAddress("[email protected]"));
        msg.setSubject("这是来自java程序的一封邮件");
        msg.setText("这是邮件的正文...内容...");
        //找到邮递员
        Transport trans=session.getTransport();
        trans.connect("zhengjiani_1995","password");
        trans.sendMessage(msg,msg.getAllRecipients());
    }
}

猜你喜欢

转载自blog.csdn.net/nicezheng_1995/article/details/81539073