使用javamail 发送邮件:正文、图片、附件
可以先写一个properties文件
mail.properties
mail.smtpServer=XXX.qq.com
mail.username=xxxxx@qq.com
//密码是去邮箱设置的授权码
mail.password=xxxxx
再写一个静态的配置类,为了吧发件信息写活,到时候代码好获取,测试也可以直接写死
private static final Properties props;
static {
InputStream in = RemoteFileConfigUtils.class.getClassLoader().getResourceAsStream("mail.properties");
props = new Properties();
try {
props.load(in);
} catch (IOException ex) {
throw new RuntimeException(ex.getMessage(), ex);
} finally {
IOUtils.closeQuietly(in);
}
}
/**
* 得到某一属性的值.
*
* @param key
* 取得其值的键
* @return key的值
*/
public static String getValue(String key) {
if (props.containsKey(key)) {
// 得到某一属性的值
String value = props.getProperty(key);
return value;
} else
return "";
}
具体的代码:
public static MimeMessage imageMail(Session session,HttpServletRequest request,String emailAdd) throws MessagingException, UnsupportedEncodingException {
//emailAdd 是收件人的邮箱地址
//消息的固定信息
MimeMessage mimeMessage = new MimeMessage(session);
//邮件发送人
mimeMessage.setFrom(new InternetAddress(CommonUtils.getValue("mail.username")));
//邮件接收人
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(emailAdd));
//标题
mimeMessage.setSubject("标题提醒", "UTF-8");
/*
* 下面是邮件内容的创建:
*/
//创建图片“节点”
String realPath=request.getSession().getServletContext()
.getRealPath("add_icon.png");
String realPath1=request.getSession().getServletContext()
.getRealPath("search2.png");
MimeBodyPart image = new MimeBodyPart();
MimeBodyPart image1 = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource(realPath)); // 读取本地文件
image.setDataHandler(dh); // 将图片数据添加到“节点”
image.setContentID("add_icon.png"); // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
DataHandler dh1 = new DataHandler(new FileDataSource(realPath1)); // 读取本地文件
image1.setDataHandler(dh1); // 将图片数据添加到“节点”
image1.setContentID("search2.png"); // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
//创建文本“节点”
MimeBodyPart text = new MimeBodyPart();
text.setContent("提醒:正文标题 <br> <font color=\"red\"><b>【提示】</b></font><br><br></br> " +
传的第一张图片 -><img src='cid:search2.png'/> 传第二张图片<img src='cid:add_icon.png'/>上。<br>" +
,"text/html;charset=UTF-8");
//(文本+图片)设置 文本 和 图片 “节点”的关系(将 文本 和 图片 “节点”合成一个混合“节点”)
MimeMultipart mm_text_image = new MimeMultipart();
mm_text_image.addBodyPart(text);
mm_text_image.addBodyPart(image);
mm_text_image.addBodyPart(image1);
mm_text_image.setSubType("related"); // 关联关系
//将 文本+图片 的混合“节点”封装成一个普通“节点”
// 最终添加到邮件的 Content 是由多个 BodyPart 组成的 Multipart, 所以我们需要的是 BodyPart,
// 上面的 mm_text_image 并非 BodyPart, 所有要把 mm_text_image 封装成一个 BodyPart
MimeBodyPart text_image = new MimeBodyPart();
text_image.setContent(mm_text_image);
//创建附件“节点”
String path=request.getSession().getServletContext()
.getRealPath("附件-流程.zip");
MimeBodyPart attachment = new MimeBodyPart();
DataHandler dh2 = new DataHandler(new FileDataSource(path)); // 读取本地文件
attachment.setDataHandler(dh2); // 将附件数据添加到“节点”
attachment.setFileName(MimeUtility.encodeText(dh2.getName())); // 设置附件的文件名(需要编码)
//设置(文本+图片)和 附件 的关系(合成一个大的混合“节点” / Multipart )
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(text_image);
mm.addBodyPart(attachment); // 如果有多个附件,可以创建多个多次添加
mm.setSubType("mixed"); // 混合关系
//设置整个邮件的关系(将最终的混合“节点”作为邮件的内容添加到邮件对象)
mimeMessage.setContent(mm);
//设置发件时间
mimeMessage.setSentDate(new Date());
//保存上面的所有设置
mimeMessage.saveChanges();
return mimeMessage;
}
再写一个配置类,放所有的邮件发送方式的
public static void sendImageMail(String emailAdd, Map<String, String> paramMap,HttpServletRequest request) throws MessagingException, UnsupportedEncodingException {
//创建一个配置文件保存并读取信息
Properties properties = new Properties();
//设置邮件服务器
properties.setProperty("mail.host",CommonUtils.getValue("mail.smtpServer"));
//设置发送的协议
properties.setProperty("mail.transport.protocol","smtp");
//设置用户是否需要验证
properties.setProperty("mail.smtp.auth","true");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.timeout", 25000);
//1.创建一个session会话对象;
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(CommonUtils.getValue("mail.username"),CommonUtils.getValue("mail.password"));
}
});
//可以通过session开启Dubug模式,查看所有的过程
session.setDebug(true);
//2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;
Transport tp = session.getTransport();
//3.连接服务器,需要抛出异常;
tp.connect(CommonUtils.getValue("mail.smtpServer"),CommonUtils.getValue("mail.username"),CommonUtils.getValue("mail.password"));
//4.连接上之后我们需要发送邮件;
MimeMessage mimeMessage =ItemFormalReviewAction.imageMail(session,request, emailAdd, paramMap);
//5.发送邮件
tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
//6.关闭连接
tp.close();
}
仅供参考,本人也是小学生一枚,请大神多指教-_-!!!;