2 qq 23039605 qq_23039605 于 2016.09.06 10:03 提问

java mail 发送内嵌图片 如何引用服务器上已有图片

用 java mail 发送 内嵌图片,我不想引用本地图片,我想引用 项目内的图片,
如何引用呢? 最好写个引用项目内的图片代码片段(一行代码就好)

4个回答

pandasdl
pandasdl   2016.09.07 14:32
已采纳

实现过程:
1.web前端(bootstrap布局)

?

12345678910111213141516171819202122232425262728293031323334

  • 姓名:
  • 电话:
  • 邮件:
  • 消息:

  • 发送邮件

2.首先准备一个XML的模板(包含的是邮件的html格式的文本)。

?

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495

<?xml version="1.0" encoding="UTF-8"?><!-- 将空格换成全角的空格,就可以保证html不会将空格过滤掉 -->

Creating Email Magic
发件人: {0}
电话: {1}
邮箱: {2}
内容:
   {3}
Twitter Facebook

其中模板中会有一些标识符,如{i},表还是字符串的预留位置,然后通过MessageFormat格式化这样的消息,然后将格式化后的字符串插入到模式中的适当位置。

?

123456

//得到XML的模板String XML_path = ServletActionContext.getServletContext().getRealPath("/mailTemplate")+"/myMailTemplete.xml"; String str=new ReaderXML().read(XML_path); Object[] obj=new Object[]{mailForm.getName(), mailForm.getPhone(), mailForm.getE_mail(), mailForm.getContent(), "e_mail", "left", "right", "tw", "fb"}; //MessageFormat可以格式化这样的消息,然后将格式化后的字符串插入到模式中的适当位置String tcontent = MessageFormat.format(str, obj);

最终XML模板中的{i}分别被obj[i]替换了。
3.写一个对XML模板的类ReaderXML

?

1234567891011121314151617181920

public class ReaderXML { public String read(String path){ String str=null; str=reader(path); return str; } private String reader(String path){ SAXReader reader=new SAXReader(); String str=null; try { Document d=reader.read(new File(path)); Element e=d.getRootElement(); Element htmle=e.element("html"); str=htmle.asXML(); } catch (DocumentException e) { e.printStackTrace(); } return str; }}

4.最后就是我们的控制器类MailAction
  在 HTML 格式的正文中内含图片是使用MimeBodyPart类的setContentID() 方法设置对应的资源文件的唯一标识符,即 MIME 协议对于邮件的结构组织格式中的 Content-ID 头字段,对应着XML模板中的cid:{i}标识, 如(注:{i}会通过MessageFormat.format替换成对应的字符串)

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788

public class MailAction extends ActionSupport{ private MailForm mailForm; public MailForm getMailForm() { return mailForm; } public void setMailForm(MailForm mailForm) { this.mailForm = mailForm; } //添加内嵌图片 private MimeBodyPart createImageMimeBodyPart(String imageName) throws MessagingException, UnsupportedEncodingException{ FileDataSource fds=new FileDataSource(ServletActionContext.getServletContext().getRealPath("/image")+"/" + imageName + ".gif"); MimeBodyPart mbp=new MimeBodyPart(); DataHandler dh=new DataHandler(fds); mbp.setDataHandler(dh); //设置对应的资源文件的唯一标识符,即 MIME 协议对于邮件的结构组织格式中的 Content-ID 头字段; mbp.setHeader("Content-ID", imageName); mbp.setFileName(MimeUtility.encodeText(fds.getName())); return mbp; } public String sendMail(){ try { HttpServletRequest request = ServletActionContext.getRequest(); String pwd = "************";//发件人邮箱密码 String mailfrom = "***********@163.com"; //网易的邮箱 String wangyiFrom = mailfrom.substring(0, mailfrom.indexOf('@'));//网易邮箱的用户名 String tu = "163.com"; //发件人邮箱的后缀域名 String tto= "**********@qq.com"; //接收邮件的邮箱 String ttitle= "有人联系你---来自胡峻峥的个人网站"; //根据其物理路径,得到XML的模板 String XML_path = ServletActionContext.getServletContext().getRealPath("/mailTemplate")+"/myMailTemplete.xml"; String str=new ReaderXML().read(XML_path); Object[] obj=new Object[]{mailForm.getName(), mailForm.getPhone(), mailForm.getE_mail(), mailForm.getContent(), "e_mail", "left", "right", "tw", "fb"}; //MessageFormat可以格式化这样的消息,然后将格式化后的字符串插入到模式中的适当位置 String tcontent = MessageFormat.format(str, obj); Properties props=new Properties(); props.put("mail.smtp.host","smtp."+tu);//邮箱SMTP服务器地址端口 props.put("mail.smtp.auth","true");//这样才能通过验证 Session s=Session.getInstance(props); s.setDebug(true); MimeMessage message=new MimeMessage(s); //给消息对象设置发件人/收件人/主题/发信时间 InternetAddress from; from = new InternetAddress(mailfrom);//发件人的qq邮箱 message.setFrom(from); InternetAddress to=new InternetAddress(tto);//收件人的邮箱 message.setRecipient(Message.RecipientType.TO,to); message.setSubject(ttitle); message.setSentDate(new Date()); //给消息对象设置内容 BodyPart mbp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象 mbp.setContent(tcontent,"text/html;charset=gb2312");//给BodyPart对象设置内容和格式/编码方式 // 用于组合文本和图片,"related"型的MimeMultipart对象 Multipart mm=new MimeMultipart("related");//新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个) mm.addBodyPart(mbp);//将BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart) //添加图片 mm.addBodyPart(createImageMimeBodyPart("e_mail")); mm.addBodyPart(createImageMimeBodyPart("left")); mm.addBodyPart(createImageMimeBodyPart("right")); mm.addBodyPart(createImageMimeBodyPart("tw")); mm.addBodyPart(createImageMimeBodyPart("fb")); message.setContent(mm);//把mm作为消息对象的内容 message.saveChanges(); Transport transport=s.getTransport("smtp"); transport.connect("smtp."+tu, wangyiFrom, pwd); //这里的wangyiFrom为发件人网易账号 transport.sendMessage(message,message.getAllRecipients()); transport.close(); ActionContext.getContext().getSession().put("operations", "邮件发送成功, 请耐心等待回复!"); } catch (Exception e) { System.out.println(e.toString()); ActionContext.getContext().getSession().put("errors", e.toString()); return "errors"; } return "sendMail"; }}

kun_tostudy
kun_tostudy   Rxr 2016.09.06 10:10
of214
of214   2016.09.06 12:53

直接在内容中使用img标签就可以了

qq_23039605
qq_23039605   2016.09.06 13:25

还是没明白我提问是什么意思,我的意思是 看下面代码片段:

 mimeMessageHelper.setText("my text <img src='cid:picture'>", true);
 mimeMessageHelper.addInline("picture", new File("E:/图片/美图图库/baby.jpg"));

如何把本地图片,也就是new File("E:/图片/美图图库/baby.jpg"),改成引用项目内已有的图片.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java发送内嵌图片的邮件
使用Java发送邮件时,既需要发送html文档又需要在邮件中内嵌图片(非附件形式),这里封装了一个类使用JavaMail组织的邮件发送,支持多张图片发送,并指定图片位置。注意img标签src要如下写"其中abcd对应mageMailDto#imageCid,可以自行定义,不要出现重复。 发送方法,注意替换几个邮件参数,如host、user、password /** * 发送内嵌图片
java实现发送邮件可多个附件内嵌图片-commons-email使用
前言        java实现发邮件功能,其实SUN在javaEE的开发包里给我们提供了相关的工具,利用 mail.jar 和 activation.jar可以实现这个功能,n年前包括我第一次实习的时候项目上也是用SUN提供的包实现的,实现起来比较繁琐麻烦,今天我们就用Apache的工具包commons-email包来实现发送带邮件和内嵌图片的功能,它是把前者做了下封装,使用起来更加的简易方便
java mail 图片
public boolean sendMailWithPic(String from, String to, String subject,                                   String content,                                   int subscribeid) {//        try {//        
用Java Mail发送带有图片的html格式的邮件.txt
用Java Mail发送带有图片的html格式的邮件.txt
java mail服务器源代码
java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器java mail服务器
java mail 带附件 正文有图片和文字
package com.chinasofti.email.utils; import java.util.Date; import java.util.Enumeration; import java.util.Properties; import java.util.Vector; import javax.activation.*; import javax.mail.Au
javamail 发送邮件,发复杂html,包括附件,以及内嵌图片的邮件
当前版本:javamail1_4_4.zip      可以去oracle去下载最新的版本 发复杂的邮件,html内容,包括带附件的,邮件内容嵌入图片的邮件 首先,要导入的包有: dsn.jar mailapi.jar smtp.jar 然后,直接看类 ——————————————————————————————————————————————————————————
Spring实现邮件发送之添加附件、内嵌图片
1、Spring实现邮件发送(包括给新浪,网易发送) try{ SimpleMailMessage msg=new SimpleMailMessage(); msg.setTo("bingliang85@sina.com"); //msg.setTo("zhangfl85@163.com"); /*
java实现发送邮件可多个附件内嵌图片-commons-email使用(未测试)
前言        java实现发邮件功能,其实SUN在javaEE的开发包里给我们提供了相关的工具,利用 mail.jar 和 activation.jar可以实现这个功能,n年前包括我第一次实习的时候项目上也是用SUN提供的包实现的,实现起来比较繁琐麻烦,今天我们就用 Apache的工具包commons-email包来实现发送带邮件和内嵌图片的功能,它是把前者做了下封装,使用起来更加的简
spring mvc发送带有内嵌图片的velocity模板
1.velocity模板如下 test.vm 你好,${userName}! 下面是实例图片: 模板路径:/sem/src/main/webapp/WEB-INF/velocity/email/test.vm 2.service工具类中: 方法一: MimeMessageHelper messageHelper = new MimeMessageHelper(mi