package com.neusoft.test; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; public class AttchImgMail {
/** * @param recipient 收件人地址 * @param subject 标题 * @param content 文章正文 * @param imgPath 图片路径 * */ public boolean sendEmailWithImg(String recipient,String subject, String content,String imgPath) { // JavaMail需要Properties来创建一个session对象。它将寻找字符串"mail.smtp.host",属性值就是发送邮件的主机. Properties properties = new Properties(); // properties.put("mail.smtp.host", "mailcas.chinapnr.com");// 设置smtp主机 properties.put("mail.smtp.host", "smtp.163.com");// 设置smtp主机 properties.put("mail.smtp.auth", "true");// 使用smtp身份验证 boolean flag = false; try { MimeMessage message = new MimeMessage(Session.getInstance(properties, new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(//设置发送帐号密码 "发送邮件邮箱", "密码"); } })); // 设置邮件的属性 // 设置邮件的发件人 message.setFrom(new InternetAddress("发件人")); // 设置邮件的收件人 cc表示抄送 bcc 表示暗送 message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipient )); // 设置邮件的主题 message.setSubject(subject); // 创建邮件的正文 MimeBodyPart text = new MimeBodyPart(); // setContent(“邮件的正文内容”,”设置邮件内容的编码方式”) text.setContent(content, "text/html;charset=gb2312"); // 点到点的发送 // 一对多发送只要改一个地方如下: // // 构建一个群发地址数组 // InternetAddress[] adr=new InternetAddress[toMore.length]; // for(int i=0;i<toMore.length;i++){ adr[i]=new // InternetAddress(toMore[i]); } // // Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点 到点不一样 // message.setRecipients(Message.RecipientType.TO,adr); // 创建图片 MimeBodyPart img = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource(imgPath));//图片路径 img.setDataHandler(dh); // 创建图片的一个表示用于显示在邮件中显示 img.setContentID("a"); // 创建附件 // MimeBodyPart attch = new MimeBodyPart(); // DataHandler dh1 = new DataHandler(new FileDataSource("src//b.jpg")); // attch.setDataHandler(dh1); // String filename1 = dh1.getName(); // MimeUtility 是一个工具类,encodeText()用于处理附件字,防止中文乱码问题 // attch.setFileName(MimeUtility.encodeText(filename1)); // 关系 正文和图片的 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(img); mm.setSubType("related");// 设置正文与图片之间的关系 // 图班与正文的 body MimeBodyPart all = new MimeBodyPart(); all.setContent(mm); message.setContent(mm); message.saveChanges(); // 保存修改 Transport.send(message);// 发送邮件 System.out.println("邮件发送成功"); flag = true; return flag; }catch(Exception ex) { ex.printStackTrace(); return flag; } } }
Linux环境下邮件主题、发件人中文乱码解决
加入mail-1.4.jar javaEE6 以下需要依赖包activation-1.0.2.jar
使用MimeUtility.encodeText()方法
例如:emailVo.setYjzt(MimeUtility.encodeText(yjzt,MimeUtility.mimeCharset("gb2312"), null))
即可解决