今日学习的知识是使用JAVAMail来发送邮件; 前期的准备工具,所需的jar包
下面给大家提供了下载jar包的地址
mail-1.4.7.jar https://mvnrepository.com/artifact/javax.mail/mail/1.4.7
activation-1.1.1.jar https://mvnrepository.com/artifact/javax.activation/activation/1.1.1
itcast-tools-1.4.2.jar http://www.pc6.com/softview/SoftView_459437.html
首先,发送邮件需要三步,1、需要得到session,2、创建MimeMessage,3、发送邮件
1、得到session
由于得到session需要用到Session.getInstance(Properties,Authenticator);
获取Properties对象
Properties props=new Properties();
props.setProperty("mail.host", "smtp.163.com");//设置发件人的SMTP服务器地址
props.setProperty("mail.smtp.auth", "true");//设置用户的认证方式
获取Authenticator
Authenticator auth=new Authenticator() {
[@Override](https://my.oschina.net/u/1162528)
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("tmac_czr","12354czr");//设置您的授权码,不是邮箱密码哦
}
};
//这样就得到了session
Session session=Session.getInstance(props,auth);
2、创建MimeMessage
/*
* 2、创建MimeMessage
*
* */
MimeMessage msg=new MimeMessage(session);//创建邮件对象msg
msg.setFrom(new InternetAddress("tmac_czr@163.com"));//设置发件人
msg.setRecipients(RecipientType.TO, "tmac_czr@163.com");//设置收件人
msg.setRecipients(RecipientType.CC, "tmac_czr@163.com");//设置抄送
msg.setRecipients(RecipientType.BCC, "tmac_czr@163.com");//设置暗送
msg.setSubject("这是一封测试邮件");//设置邮件主题
msg.setContent("这就是一封垃圾邮件","text/html;charset=utf-8");//设置邮件正文
3、发送邮件
/*
* 3、发送
* */
Transport.send(msg);
这样就可以发送邮件啦,效果如图 ![](https://oscimg.oschina.net/oscnet/3888eff875b14a351fa8f76df15e498cb43.jpg)
**发送附带附件的邮件**
/*
* 当发送包括附件的邮件时,邮件体就为多部件形式
* 1、创建一个多部件的部件内容。MimeMultipart
* MimeMultipart就是一个集合,用来装载多个主体部件
* 2、我们需要创建两个主体部件,一个用来装载文本内容,另一个是附件
* 主体部件叫MimeBodyPart
* 3、把MimeMultipart设置给MimeMessage的内容
* */
MimeMultipart list=new MimeMultipart();//创建多部分主体
//创建MimeBodyPart
MimeBodyPart part1=new MimeBodyPart();
//设置主体部件的内容
part1.setContent("这是一个含有附件的邮件","text/html;charset=utf-8");
//把主体部件添加到list集合中
list.addBodyPart(part1);
//创建一个MimeBodyPart
MimeBodyPart part2=new MimeBodyPart();
part2.attachFile(new File("D:/PYY.jpg"));//设置附件的内容
part2.setFileName(MimeUtility.encodeText("彭于晏.jpg"));//设置显示的文件名称,其中encodeText处理乱码问题
list.addBodyPart(part2);
msg.setContent(list);//把它设置给邮件作为邮件的内容
/*
* 3、发送
* */
Transport.send(msg);
效果如图:![](https://oscimg.oschina.net/oscnet/e8750b3e39a7adef0d377051b2399603c98.jpg)
给大家介绍一个简洁的工具类MailUtils,所需jar包是itcast-tools-1.4.2.jar,上面有提供哦
使用MailUtils,可以减少代码量,方便简洁。建议先掌握上面的常规方法先呢
/*
* 1、得到session
* */
Session session=MailUtils.createSession("smtp.163.com",
"tmac_czr", "12354czr");
/*
* 2、创建邮件对象
* */
Mail mail=new Mail("tmac_czr@163.com",
"tmac_czr@163.com","tmac_czr@163.com","这是正文");
/*
* 添加附件
* */
AttachBean ab1=new AttachBean(new File("D:/PYY.jpg"),"彭于晏.jpg");
mail.addAttach(ab1);
/*
* 发送
* */
MailUtils.send(session, mail);
效果为:![](https://oscimg.oschina.net/oscnet/73257334240a318ba307d7fc1499a4ec975.jpg)
其中给大家解决一下在发送邮件时会遇到的异常,
在写完上面的代码时遇到java.lang.NoClassDefFoundError:com/sun/mail/util/LineInputStream
解决方法:将javaee5的库,变成javaee6的库
具体实现把javaee5移除
![](https://oscimg.oschina.net/oscnet/898cb7fdd4363ca23f560f94ee12c072ae7.jpg)
然后重新BulidPath->add Library->选择![](https://oscimg.oschina.net/oscnet/bf8b630a5630c913def5999cde95d5e7f0a.jpg)
这样就解决了这个异常了,但是你以为就这样结束了嘛?
接下来又报550 User has no permission(邮箱不可用)这个异常
解决方法:授权码选择开启
![](https://oscimg.oschina.net/oscnet/5338ea65ab155fa85329415ca28544daa39.jpg)
如果没有设置授权码的可以重新设置哦
大家要小心一点,如果你的授权码错误会认证失败并且报535 Error:authentication failed:这个错误就是认证失败!
本以为可以发送了的,结果又来了一个错误smtp.SMTPSendFailedException: 553 Mail from must equal authorized user=发件人邮箱写错
解决方法:保证登录人邮箱跟发信人邮箱一致
嘻嘻嘻,今天给大家分享的内容就到这啦