渐渐地越来越多的小工具,是程序越来越简单,我还是一个比较复古的人,总是喜欢那种最原始的东西.
想到以后的java邮件发送可能多数会使用封装好的工具类,还是有点不舍,觉得还是把这种原始的记录下来.
java邮件发送主要涉及
两个包:mail.jar , activation.jar包
三个对象:javax.mail.Session,MimeMessage,Transport
Session需要两个参数:Properties,Authenticator
Properties props = new Properties();
props.setProperty("mail.host","smtp.163.com");//服务器主机名
props.setProperty("mail.smtp.auth","true); //邮箱
Authenticator anth = new Authenticator(){ //抽象类
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("账号", "密码");
}
}
Session session = Session.getInstance(props,auth);
MimeMessage msg = new MimeMessage(session);
msg.setFrom("");
msg.setRecipients(RecipientType.TO,"");
msg.setRecipients(RecipientType.CC,"");抄送
msg.setRecipients(RecipientType.BCC,"");密送
/**
* 当发送含有附件的邮件时,邮件体为多部件形式
* 1,创建一个多部件的邮件内容:MimeMultiPart,
* MimeMultiPart 就是一个集合,用来装在多个主体部件!
* 2,邮件的主体部件:MimeBodyPart 可以为文本内容,也可以为附件
* 3,将含有多个主体部件的邮件主体设置给MimeMessage
*/
MimeMultiPart list = new MimeMultiPart();
//1,主体部件1
MimeBodyPart part1 = new MimeBodyPart ();
part1.setContent("这是一个含有图片附件的多部件邮件!", "text/html;charset=utf-8");
list.addBodyPart(part1);
//2,主体部件2
MimeBodyPart part2 = new MimeBodyPart();
part2.attachFile(new File("F:/a.jpg"));
part2.setFileName(MimeUtility.encodeText("图片.jsp"));
list.addBodyPart(part2);
//
msg.setContent(list);
Transport.send(msg);
遇到的问题:
1,邮件的发送,需要发送邮件的服务器授予smtp的权限
2,try {
Transport.send(msg);
} catch (Exception e) {
System.out.println("错误:::"+e.getMessage());
}
打印出错误信息是null;
原因:msg.setContent(Object o,String type);
邮件内容的第一个参数是:邮件内容的对象,可以是字符串,
第二个参数是邮件内容的类型:text/html;charset=utf-8,
无意间将这两个参数设置错了.