使用 SpringMail 发送带图片和附件的邮件
# 发送带附件的邮件
/** | |
* 【发送带附件邮件】 | |
* @param mailContent 邮件内容 | |
* @param mailAddress 邮件地址 | |
* @param Mailtitle 邮件标题 | |
* @param attachments 附件 Map | |
* @param ID 消息 id | |
* @return | |
*/ | |
public static boolean sendMailByYY(String mailContent, String mailAddress, String Mailtitle, | |
Map<String, InputStreamSource> attachments, String ID) { | |
boolean result = true; | |
try { | |
JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); | |
// 设定 mail server | |
senderImpl.setHost(Constants.MAILSERVER); | |
senderImpl.setPort(Integer.parseInt(Constants.MAILSERVERPORT)); | |
senderImpl.setUsername(Constants.MAILSERVICEADD); | |
senderImpl.setPassword(Constants.MAILPASSWORD); | |
// 建立邮件消息,设置邮件头 | |
MimeMessage mailMessage = senderImpl.createMimeMessage(); | |
//mailMessage.setHeader("XXXXXX", "XXXXXX"); | |
// 发送带附件邮件需要设置 multipart 为 true | |
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8"); | |
// 设置收件人,寄件人 | |
String sender = Constants.MAILUSERNAME; | |
String nick = MimeUtility.encodeText(sender); | |
messageHelper.setTo(mailAddress); | |
messageHelper.setFrom(new InternetAddress(nick + "<" + Constants.MAILADDR + ">")); | |
messageHelper.setSubject(Mailtitle); | |
messageHelper.setText(mailContent, true); | |
// 添加附件 | |
if (attachments != null && attachments.size() > 0) { | |
Iterator<Entry<String, InputStreamSource>> iterator = attachments.entrySet() | |
.iterator(); | |
while (iterator.hasNext()) { | |
String key; | |
InputStreamSource value; | |
key = iterator.next().getKey(); | |
value = attachments.get(key); | |
// MimeUtility.encodeWord (key) 解决文件名乱码问题 | |
messageHelper.addAttachment(MimeUtility.encodeWord(key), value); | |
} | |
} | |
Properties prop = new Properties(); | |
// 将这个参数设为 true,让服务器进行认证,认证用户名和密码是否正确 | |
prop.put("mail.smtp.auth", "true"); | |
prop.setProperty("mail.smtp.connectiontimeout", "60000"); | |
prop.put("mail.smtp.timeout", "60000"); | |
senderImpl.setJavaMailProperties(prop); | |
// 发送邮件 | |
senderImpl.send(mailMessage); | |
logger.info(ID + "|" + mailAddress + "| send mail OK "); | |
} | |
catch (Exception e) { | |
logger.error(ID + "|" + mailAddress + "| send mail fail ", e); | |
result = false; | |
} | |
return result; | |
} |
<font color="#FF0000"> 附件有下面三种方式可以添加:</font>
public void addAttachment(String attachmentFilename, InputStreamSource inputStreamSource) throws MessagingException | |
public void addAttachment(String attachmentFilename, File file) throws MessagingException | |
public void addAttachment(String attachmentFilename, DataSource dataSource) throws MessagingException |
# 发送带图片的邮件
/** | |
* 【发送带图片的邮件】html 中需要修改 imgSrc,<img src="cid:imgId"/> | |
* @param mailContent 邮件 HTML 内容 | |
* @param mailAddress 收件地址 | |
* @param Mailtitle 标题 | |
* @param ID | |
* @param mapImgs 邮件中包含的图片,其中 Key 是 imgId,Value 是图片的存储路径 | |
* @return | |
*/ | |
public static boolean sendMailByYY(String mailContent, String mailAddress, String Mailtitle, | |
String ID, Map<String, String> mapImgs) { | |
boolean result = true; | |
try { | |
JavaMailSenderImpl senderImpl = new JavaMailSenderImpl(); | |
// 设定 mail server | |
senderImpl.setHost(Constants.MAILSERVER); | |
senderImpl.setPort(Integer.parseInt(Constants.MAILSERVERPORT)); | |
senderImpl.setUsername(Constants.MAILSERVICEADD); | |
senderImpl.setPassword(Constants.MAILPASSWORD); | |
// 建立邮件消息 | |
MimeMessage mailMessage = senderImpl.createMimeMessage(); | |
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage, true, "utf-8"); | |
// 设置收件人,寄件人 | |
String sender = Constants.MAILUSERNAME; | |
String nick = javax.mail.internet.MimeUtility.encodeText(sender); | |
messageHelper.setTo(mailAddress); | |
messageHelper.setFrom(new InternetAddress(nick + "<" + Constants.MAILADDR + ">")); | |
messageHelper.setSubject(Mailtitle); | |
messageHelper.setText(mailContent, true); | |
// 添加图片 | |
if (mapImgs != null && mapImgs.size() > 0) { | |
Iterator<Entry<String, String>> iterator = mapImgs.entrySet().iterator(); | |
while (iterator.hasNext()) { | |
String key; | |
String value; | |
key = iterator.next().getKey(); | |
value = mapImgs.get(key); | |
FileSystemResource img = new FileSystemResource(new File(value)); | |
messageHelper.addInline(key, img); | |
} | |
} | |
Properties prop = new Properties(); | |
// 将这个参数设为 true,让服务器进行认证,认证用户名和密码是否正确 | |
prop.put("mail.smtp.auth", "true"); | |
prop.setProperty("mail.smtp.connectiontimeout", "60000"); | |
prop.put("mail.smtp.timeout", "60000"); | |
senderImpl.setJavaMailProperties(prop); | |
// 发送邮件 | |
senderImpl.send(mailMessage); | |
logger.info(ID + "|" + mailAddress + "| send mail OK "); | |
} | |
catch (Exception e) { | |
logger.error(ID + "|" + mailAddress + "| send mail fail ", e); | |
result = false; | |
} | |
return result; | |
} |
<font color="#FF0000"> 发送带图片的邮件需要修改 img 标签的 src 属性:</font>
<img src="cid:imgId"/>