Javamail 实现简单发送邮件(一)

Javamail 实现简单发送邮件(一)

  在互联网刚开始普及的时代,邮件就像古时书信一样重要。尽管如今实时通讯已经做得非常便捷了,但是邮件依然起着不可替代的作用。许多大厂、学校都有自己的邮件系统,其中比较著名的就属Gmail、outlook、网易163和QQ等邮箱了。

一、发送邮件原理

两个重要协议

  1. SMTP: Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协议,默认端口,25
  2. POP3: Post Office Protocol 3,即邮局协议,接收邮件的协议,默认端口,110

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-auTSNwZx-1574777325887)(..\images\邮件实现原理.png)]

①、用户A的电子邮箱为:xx@qq.com,通过邮件客户端软件写好一封邮件,交到QQ的邮件服务器,这一步使用的协议是SMTP,对应图示的①;

②、QQ邮箱会根据用户A发送的邮件进行解析,也就是根据收件地址判断是否是自己管辖的账户,如果收件地址也是QQ邮箱,那么会直接存放到自己的存储空间。这里我们假设收件地址不是QQ邮箱,而是163邮箱,那么QQ邮箱就会将邮件转发到163邮箱服务器,转发使用的协议也是SMTP,对应图示的②;

③、163邮箱服务器接收到QQ邮箱转发过来的邮件,也会判断收件地址是否是自己,发现是自己的账户,那么就会将QQ邮箱转发过来的邮件存放到自己的内部存储空间,对应图示的③;

④、用户A将邮件发送了之后,就会通知用户B去指定的邮箱收取邮件。用户B会通过邮件客户端软件先向163邮箱服务器请求,要求收取自己的邮件,对应图示的④;

⑤、163邮箱服务器收到用户B的请求后,会从自己的存储空间中取出B未收取的邮件,对应图示⑤;

⑥、163邮箱服务器取出用户B未收取的邮件后,将邮件发给用户B,对应图示的⑥;最后三步用户B收取邮件的过程,使用的协议是POP3;

二、代理邮件客户端(Java)

  相信很多人都经历过邮箱登陆、注册、接收通知等活动吧!!!邮件的作用很多,尤其在国外异常多!!!我曾经看到过一个视频,就是Facebook的创始人扎克伯格接收哈佛录取通知书,视频中小扎就是打开邮箱查看的录取通知书。可想而知,mail是多么重要而且普及了吧!!!

  网站实现邮件登陆、注册其实并不难。你可以自己申请一个域名,然后创建一个专属于你的邮箱系统,也可以使用其他大型邮件客户端的接口,进行学习使用。今天我们主要讲第二种,实现接口,发送邮件。

1、开启第三方登陆(QQ)

  主要以QQ邮箱为例,邮箱设置基本都是一样的只是位置不同罢了。开启POP3/SMTP服务和IMAP/SMTP服务,并按提示要求生成授权码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-huL3HaHS-1574777325890)(../images/qq邮箱开启第三方.png)]

2、所需依赖

	<dependency>
		<groupId>javax.mail</groupId>
		<artifactId>mail</artifactId>
		<version>1.4.7</version>
   </dependency>

3、编写代码实现

	public void TestSend() {
		/**
		 * 1、设置邮箱的一些属性,关于Properties类的介绍
		 * 2、创建认证对象authenticator,使用自己的邮件账号和授权码 
		 * 3、获得一个session对象,用来保存认证对象
		 * 4、创建邮件消息对象message 
		 * 	4.1、设置message的发送人,这个要和认证对象的账号一致
		 *  4.2、设置message的接收人
		 * 	4.3、设置邮件的主题和内容
		 */

        //1 确定连接位置
        Properties props = System.getProperties();
        //1.1获取qq邮箱smtp服务器的地址,
        props.setProperty("mail.smtp.host", "smtp.qq.com");
        //1.2是否进行权限验证。
        props.setProperty("mail.smtp.auth", "true");
        
        //3 建立邮件会话                             2、创建认证对象authenticat
        Session session = Session.getDefaultInstance(props, new Authenticator() {
        	 //填写自己的qq邮箱的登录帐号和授权密码,授权密码的获取,在后面会进行讲解。
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("XXXXXXXXX@qq.com", "XXXXXXXXX"); //账户 授权码
            }
        });
            //4、创建消息
        MimeMessage message = new MimeMessage(session);
     
      
       //4.1 附带发件人名字
       
       //设置自定义发件人昵称  
       String nickFrom = MimeUtility.encodeText("职能搜索平台");  
       String nickTo = MimeUtility.encodeText("酷酷的用户");  
       //4.2 设置发信人  
	   message.setFrom(new InternetAddress(nickFrom+"<XXXXXXXXXX@qq.com>"));
	   message.setRecipients(Message.RecipientType.TO, nickTo+"<XXXXXXXXXX@163.com>");
	   message.setRecipients(Message.RecipientType.BCC, nickFrom+"<XXXXXXXXXX@qq.com>");
	   
	   /**
        * 4.2 收件人 (补充)
        *         第一个参数:
        *             RecipientType.TO    代表收件人 
        *             RecipientType.CC    抄送
        *             RecipientType.BCC    暗送
        *         比如A要给B发邮件,但是A觉得有必要给要让C也看看其内容,就在给B发邮件时,
        *         将邮件内容抄送给C,那么C也能看到其内容了,但是B也能知道A给C抄送过该封邮件
        *         而如果是暗送(密送)给C的话,那么B就不知道A给C发送过该封邮件。
        *     第二个参数
        *         收件人的地址,或者是一个Address[],用来装抄送或者暗送人的名单。或者用来群发。可以是相同邮箱服务器的,也可以是不同的
        *         这里我们发送给我们的qq邮箱
        */
	   //4.3设置主题和内容
	   
	   message.setSubject("通过javamail发出!!!");
	   
	   //文本部分
	   message.setContent("文本邮件测试", "text/html;charset=UTF-8");
	   message.setSentDate(new Date());
	   //发送邮件
	   Transport.send(message);
	}

参考:https://www.cnblogs.com/whgk/p/6506027.html

参考:https://www.cnblogs.com/ysocean/p/7652934.html

发布了35 篇原创文章 · 获赞 0 · 访问量 1254
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览