coding喵的gravatar头像
coding喵 2017-11-17 20:19:09
【Java&邮件服务】 发送简单邮件,适合想学javaMail的小白

     感觉发一篇博客好费心啊,好多字。。。

写的代码明明是对的,由于对SMTP和POP3服务不熟,认证用户时使用邮箱地址和邮箱密码,就容易出这个错

【Java&邮件服务】  发送简单邮件,适合想学javaMail的小白

认证失败! 为什么?因为直接使用邮箱的密码和地址是不能登录第三方客户端的,必须开启SMTP/POP3服务,获得授权码代替密码,才能登录第三方客户端。

怎样获得授权码呢?

看下面:

找到 设置--》POP3/SMTP/IMAP

【Java&邮件服务】  发送简单邮件,适合想学javaMail的小白

开启服务,勾选第一个就行

【Java&邮件服务】  发送简单邮件,适合想学javaMail的小白

从这里可以自己设置授权码,qq邮箱的是发送短信,然后给你16个字符作为授权码

【Java&邮件服务】  发送简单邮件,适合想学javaMail的小白

开启之后,在自己写的邮件程序中,就能使用邮箱地址和授权码发送和接收邮件了。

这里以163邮箱为例:

首先我们要知道163邮箱发送邮件所要的参数:

【Java&邮件服务】  发送简单邮件,适合想学javaMail的小白

有这些参数,能使用Session.getInstance()方法,但不能使用getDefaultInstance()方法

要使用getDefaultInstance()方法,还需要添加SSL的参数

接下来要认证邮箱用户了

【Java&邮件服务】  发送简单邮件,适合想学javaMail的小白

我这里是写了一个内部类,直接将地址和授权码传入getPasswordAuthentication()方法验证,

也可以自己写一个类用来封装邮箱地址和授权码,继承Authenticator就行。

写邮件:

【Java&邮件服务】  发送简单邮件,适合想学javaMail的小白

InternetAddress.parse("")这个方法可直接放入字符串类型的邮件地址,可放多个,用逗号隔开就行

发送纯文本用setText()方法就行,上面我是发送的html文本

最后放源码:

import java.util.Properties;


import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class Demo01 {
     
	/**
	 * 简单邮件  纯文本   html文本   网易163服务
	 * @param args
	 * @throws Exception
	 */
	
	  public static void main(String[] args) throws Exception {
		 
		 Properties props = new Properties();
		 props.setProperty("mail.smtp.auth","true");//认证
		 props.setProperty("mail.transport.protocol","smtp");//协议
		 props.setProperty("mail.host","smtp.163.com");  //smtp服务
		 
		  
		 Session session = Session.getInstance(props,
			     new Authenticator() 
		        { 
			      protected PasswordAuthentication getPasswordAuthentication()    //内部类
			      {
			    	 return new PasswordAuthentication("163邮箱账号","授权码");//真正设置邮件用户和密码的地方
			      }
				}	 
		 );//传输环境   策略模式
		 
		 session.setDebug(true);//调试
		 
		 
		 Message msg = new MimeMessage(session);//创建邮件对象
		 msg.setFrom(new InternetAddress("****@163.com"));//可随便取的发件人名字
		 msg.setSubject("第一个正式Demo");//邮件标题
		 msg.setRecipients(RecipientType.TO,InternetAddress.parse("****@qq.com"));//收件人 两个
		 msg.setContent("<span style='color:pink;'>哈哈哈</span>","text/html;charset=GBK");//邮件正文
		 //msg.setText(arg0); //纯文本
		 
		 Transport.send(msg);//发送
		 
		 //有时无法传输时,是端口未打开  --》ping smtp.163.com
	}
}

运行还需要mail.jar包,这里就不提供了,自己找去。smiley

对这个代码有不解的地方可以问我,我有空回答;若有指正的地方,请不吝赐教。


打赏

已有1人打赏

最代码官方的gravatar头像
最近浏览
凌秋枫  LV8 2019年5月10日
171518464  LV2 2019年4月9日
希望依然  LV6 2019年1月30日
Luis虎子  LV16 2018年12月19日
ITyuan 2018年9月17日
暂无贡献等级
zzq110  LV9 2018年9月12日
上世纪风景  LV11 2018年7月16日
wkc  LV21 2018年4月9日
lw2192213158  LV1 2018年4月1日
445184148 2018年3月14日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友