写收邮件时只是显示了html里的img里的src下的cid:xxxxxx;这个是怎么通过这个cid找到图片路径的
但是这个图片的path路径怎么根据这个cid得到呢?
我记得以前好像是拼接html代码 邮件就展现了
我之前找java mail的教程:
Java Mail 入门
在页面里搜 Including Images with Your Messages
就能找到引用图片的方法
楼主可以考虑使用Base64的方式去显示图片,这样不必考虑图片路径,而且浏览器的兼容性很好。注意base64前需要拼上一串说明帮助img标签解析。
可以用base64方法试试
通过解析替换得到,给你段代码,自行研究,还没来得及整理
public String repDomain(String source, String element, String attr,List<String> contentId) throws UnsupportedEncodingException {
String img = "";
String reg = "<" + element + "[^<>]*?\\s" + attr + "=['\"]?(.*?)['\"]?(\\s.*?)?>";
Matcher m = Pattern.compile(reg).matcher(source);
while (m.find()) {
img = m.group(1);
int r=img.lastIndexOf("/")+1;
String subImg= URLDecoder.decode(img.substring(r, img.length()), "UTF-8");
// subImg= subImg.substring(0, subImg.lastIndexOf("."));
contentId.add(subImg);
subImg="cid:"+subImg;
source = source.replace(img, subImg);
}
return source;
}
@Value("#{settings['document.path']}")
private String documentPath;
@Override
public void sendMimeMessage(final List<String> toAddressList, final String fromAddress, final String subject,
final String content, final List<String> fileList, final String contentType, final List<String> cc_receiver)
throws Exception {
List<String> contentId=new ArrayList<String>();
final String html=repDomain(content,"img","src",contentId);
final List<String> cid=contentId;
try {
// 扩展信息介质接口,实现接口中的方法
MimeMessagePreparator mimeMail = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws MessagingException, UnsupportedEncodingException {
// 设置收信人地址
if (CollectionUtils.isNotEmpty(toAddressList)) {
String listString=toAddressList.toString();
listString=listString.substring(0,listString.length()-1);
listString=listString.substring(1);
InternetAddress[] iaToList = new InternetAddress().parse(listString);
mimeMessage.setRecipients(Message.RecipientType.TO, iaToList);
} else {
return;
}
if( cc_receiver.size()>0){
String listString=cc_receiver.toString();
listString=listString.substring(0,listString.length()-1);
listString=listString.substring(1);
InternetAddress[] iaToList = new InternetAddress().parse(listString);
InternetAddress[] iaCcList = new InternetAddress().parse(listString);
mimeMessage.setRecipients(Message.RecipientType.CC, iaCcList);
}
// 设置发件人地址
if (StringUtils.isNotBlank(fromAddress)) {
mimeMessage.setFrom(new InternetAddress(fromAddress));
} else {
return;
}
// 设置邮件主题
if (StringUtils.isNotBlank(subject)) {
mimeMessage.setSubject(subject);
}
// 多部件的,可以看做一个邮件容器,包含正文、附件等
Multipart multipart = new MimeMultipart();
// 添加正文
MimeBodyPart contentMimeBodyPart = new MimeBodyPart();
if (StringUtils.isNotBlank(content)) {
if (StringUtils.isNotBlank(contentType)) {
// contentMimeBodyPart.setContent(content, "text/html;charset=utf-8");
contentMimeBodyPart.setContent(html, contentType);
} else {
contentMimeBodyPart.setText(html);
}
}
multipart.addBodyPart(contentMimeBodyPart);
for (String string : cid) {
contentMimeBodyPart = new MimeBodyPart();
DataSource fds = new FileDataSource
(documentPath+"/upload/ckDir/images/images.war/"+string);
log.info("img path:"+documentPath+"/upload/ckDir/images/images.war/"+string);
contentMimeBodyPart.setDataHandler(new DataHandler(fds));
contentMimeBodyPart.setHeader("Content-ID","<"+string+">");
multipart.addBodyPart(contentMimeBodyPart);
}
// 添加附件,可以添加多个附件
if (CollectionUtils.isNotEmpty(fileList)) {
for (String file : fileList) {
MimeBodyPart fileMimeBodyPart = new MimeBodyPart();
// 文件数据源
FileDataSource fds = new FileDataSource(file);
// 数据处理器
fileMimeBodyPart.setDataHandler(new DataHandler(fds));
// 设置文件名
fileMimeBodyPart.setFileName(MimeUtility.encodeText(fds.getName()));
multipart.addBodyPart(fileMimeBodyPart);
}
}
// 将Multipart添加MimeMessage
mimeMessage.setContent(multipart);
mimeMessage.setSentDate(new Date());
}
};
// 发送邮件
mailSender.send(mimeMail);
log.info("dynamic image mail has bean sent !");
} catch (Exception e) {
log.error("toAddress:" + toAddressList.toString() + ",fromAddress:" + fromAddress + ",send mail fail:", e);
throw new Exception("send mail fail");
}
}
如果图片存在服务器的硬盘上的话 可以直接饮用,路径是相对路径
楼主可以引用图片资源 直接放到邮件里面太麻烦了