java发送内嵌图片邮件_java

整体效果:

  发送端:网易邮箱;接收端:qq邮箱。

1.web前端

2.在网易邮箱“已发送”中可以看见通过java代码发送的邮件

3.同样在qq邮箱中也可以看到这样的效果

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

<form action="mailAction!sendMail" method="post" name="mailForm" id="mailFormId">
 <ul class="list-group">
  <li class="list-group-item">
    <div class="input-group">
     <span class="input-group-addon" id="basic-addon1">姓名:</span>
     <input type="text" class="form-control" placeholder="your name" name="mailForm.name" aria-describedby="basic-addon1">
    </div>
  </li>

  <li class="list-group-item">
    <div class="input-group">
     <span class="input-group-addon" id="basic-addon2">电话:</span>
     <input type="text" class="form-control" placeholder="your phone" name="mailForm.phone" aria-describedby="basic-addon1">
    </div>
  </li>

  <li class="list-group-item">
    <div class="input-group">
     <span class="input-group-addon" id="basic-addon2">邮件:</span>
     <input type="text" class="form-control" placeholder="your e-mail" name="mailForm.e_mail" aria-describedby="basic-addon1">
    </div>
  </li>

  <li class="list-group-item" style="padding-top: 20px;">
    <span class="label label-default blog-label-1">消息:</span>
    <br><br>
    <textarea rows="10" style="width:100%" name="mailForm.content" placeholder="请输入消息(不要超过500个字符)"></textarea>
  </li>

   <li class="list-group-item">
     <center><button onclick="$('#mailFormId').submit();" type="button" class="btn btn-success">发送邮件</button></center>
   </li>
 </ul>
</form>

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

<?xml version="1.0" encoding="UTF-8"?>
<!-- 将空格换成全角的空格,就可以保证html不会将空格过滤掉 -->
<xml-body>
  <html>
    <head>
    </head>
    <body style="margin: 0; padding: 0;">
      <table border="0" cellpadding="0" cellspacing="0" width="100%">
        <tbody><tr>
          <td style="padding: 10px 0 30px 0;">
            <table align="center" border="0" cellpadding="0" cellspacing="0" width="600" style="border: 1px solid #cccccc; border-collapse: collapse;">
              <tbody><tr>
                <td align="center" bgcolor="#70bbd9" style="padding: 40px 0 30px 0; color: #153643; font-size: 28px; font-weight: bold; font-family: Arial, sans-serif;">
                  <img src="cid:{4}" alt="Creating Email Magic" width="300" height="230" style="display: block;"/>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ffffff" style="padding: 40px 30px 40px 30px;">
                  <table border="0" cellpadding="0" cellspacing="0" width="100%">
                    <tbody><tr>
                      <td style="color: #153643; font-family: Arial, sans-serif; font-size: 24px;">
                        <b>
                          发件人: {0}
                          <br/>
                          电话: {1}
                          <br/>
                          邮箱: {2}
                          <br/>
                          内容:<br/>
                        </b>
                      </td>
                    </tr>
                    <tr>
                      <td style="padding: 20px 0 30px 0; color: #153643; font-family: Arial, sans-serif; font-size: 16px; line-height: 20px;">
                           {3}
                      </td>
                    </tr>
                    <tr>
                      <td>
                        <table border="0" cellpadding="0" cellspacing="0" width="100%">
                          <tbody><tr>
                            <td width="260" valign="top">
                              <table border="0" cellpadding="0" cellspacing="0" width="100%">
                                <tbody><tr>
                                  <td>
                                    <img src="cid:{5}" alt="" width="100%" height="140" style="display: block;"/>
                                  </td>
                                </tr>
                              </tbody></table>
                            </td>
                            <td style="font-size: 0; line-height: 0;" width="20">
                            </td>
                            <td width="260" valign="top">
                              <table border="0" cellpadding="0" cellspacing="0" width="100%">
                                <tbody><tr>
                                  <td>
                                    <img src="cid:{6}" alt="" width="100%" height="140" style="display: block;"/>
                                  </td>
                                </tr>
                              </tbody></table>
                            </td>
                          </tr>
                        </tbody></table>
                      </td>
                    </tr>
                  </tbody></table>
                </td>
              </tr>
              <tr>
                <td bgcolor="#ee4c50" style="padding: 30px 30px 30px 30px;">
                  <table border="0" cellpadding="0" cellspacing="0" width="100%">
                    <tbody><tr>
                      <td align="right" width="25%">
                        <table border="0" cellpadding="0" cellspacing="0">
                          <tbody><tr>
                            <td style="font-family: Arial, sans-serif; font-size: 12px; font-weight: bold;">
                              <img src="cid:{7}" alt="Twitter" width="38" height="38" style="display: block;" border="0"/>
                            </td>
                            <td style="font-family: Arial, sans-serif; font-size: 12px; font-weight: bold;">
                              <img src="cid:{8}" alt="Facebook" width="38" height="38" style="display: block;" border="0"/>
                            </td>
                          </tr>
                        </tbody></table>
                      </td>
                    </tr>
                  </tbody></table>
                </td>
              </tr>
            </tbody></table>
          </td>
        </tr>
      </tbody></table>
    </body>
  </html>
</xml-body>

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

//得到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

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}标识, 如<img src="cid:{8}"/>(注:{i}会通过MessageFormat.format替换成对应的字符串)

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";
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java发送邮件
java发送图片邮件
java发送带图片的邮件、java发送邮件带图片、java 邮件发送图片、javamail发送邮件图片、邮件内嵌图片,以便于您获取更多的相关知识。

时间: 2024-09-01 08:25:30

java发送内嵌图片邮件_java的相关文章

java发送内嵌图片邮件

v前言: 博客系统中需要邮件服务的功能,以前写过类似的功能,不过功能太简单了,仅仅是发送文本内容,现在尝试一下发送内嵌图片邮件! v准备工作: 请参考:http://www.cnblogs.com/hujunzheng/p/4792831.html v整体效果: 发送端:网易邮箱:接收端:qq邮箱. v1.web前端 v2.在网易邮箱"已发送"中可以看见通过java代码发送的邮件 v3.同样在qq邮箱中也可以看到这样的效果 v实现过程: v1.web前端(bootstrap布局) &l

.NET发送内嵌图片邮件的正确方法

很多企业发出的邮件都是图文并茂的,其中有部分是在邮件中引用网上的图片网址,更专业些的方法是直接在邮件中通过内联附件内嵌图片,这个功能可以由一些邮件客户端程序实现,那么我们怎么在.Net中实现这一功能呢? 搜索了一下,找到了一位,但这个方法经我验证是错误的,其他就没找到什么有用的资料了. 经过尝试,我找到了正确的方法,而且非常简单: 1.设置附件的ContentId属性为一个自定义名称. 2.设置附件的ContentDisposition.Inline属性为true. 3.在邮件的HTML格式正文

使用EWSJavaAPI调用Exchange如何发送内嵌大图片的邮件?

问题描述 使用EWSJavaAPI调用Exchange如何发送内嵌大图片的邮件?如题,这个问题已经困扰了我很久.用javamail库,调用smtp协议,通过cid的方式很容易实现.但是客户的服务端禁用了smtp协议,只能通过exchange专用协议连接服务器.于是,我又尝试了通过Base64编码的方式将图片编号后直接写入正文.但是这种方式对正文的空间占用太大,客户的服务器正文不能超过10KB,因此不能发送大图片.而且,这种方式我发现QQ邮箱接收不到图片.哪位大神可以帮帮小弟,感激不尽. 解决方案

求邮件正文中内嵌图片的显示问题,急求。

问题描述 我用C#做了JMAIL收取邮件,但对于正文中带的图片直接显示cid:A2CDCAD8@470E1812.45981B54.JPG,有什么办法把这CID的址址换成html的明文地址呀.查了很多资料,都没有,不知有人解决了没有. 解决方案 解决方案二:看看这个里面的链接吧解决方案三:引用1楼wangnaisheng的回复: 看看这个里面的链接吧 大虾的这些东西我都仔细看了,一般是说怎么发出去内嵌图邮件,没有说到怎么去处理接受邮件显示问题.我也了解到可能要用正则表达式把CID译过来,但不知怎

使用Zxing实现二维码生成器内嵌图片_java

使用Zxing实现二维码生成器内嵌图片,具有一定的参考价值,具体如下: 基本思路是先使用zxing生成的二维码图片,然后读取图片,在其中插入图标,然后整个输出图片. 最近的项目中需要生成二维码,找了几个例子综合下,做出了最后的效果,二维码可以生成图片格式(jpg等)或者在web页面上显示,此片文章仅作记录,雷同之处多多,包涵.... 注:需要Zxing包装的工具类,大概的流程是读取内嵌的图片,将内容转化成二维码,将图片内嵌到二维码中,出图. 下面是完整代码: import Java.awt.Ba

java swing内嵌多个浏览器怎么加快速率呢

问题描述 官网代码如下:/**ChristopherDeckers(chrriis@nextencia.net)*http://www.nextencia.net**Seethefile"readme.txt"forinformationonusageandredistributionof*thisfile,andforaDISCLAIMEROFALLWARRANTIES.*/packagechrriis.dj.nativeswing.swtimpl.demo.examples.web

Java程序中使用JavaMail发送带图片和附件的邮件_java

我们常常在邮件中添加附件,以达到传输较大文件的目的.而上一篇文章只是将本机的一张图片内嵌到邮件的 HTML 格式的正文当中,这样的邮件显得不够丰富多彩.我们想要一封正文部分图文并茂,而游客附带若干附件的邮件. 下面是代码结构中3个重要的方法: MimeBodyPart createAttachment(String fileName) 方法用于创建附件并返回: MimeBodyPart createContent(String body, String fileName) 方法用于创建正文部分并

使用Java发送带附件的附件的示例_java

这里使用的是JavaMail技术,前台使用了fckeditor做邮件美化,由于只是示例,后台发送时只是将邮件保存在本地,但是可以查看,如果需要实际发送,请参考我的其他博客文章,我写了很多关于邮件发送的示例! JSP页面页面除了引用fckeditor外,要注意我们是需要发送附件的: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ ta

java中javamail发送带附件的邮件实现方法_java

本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输,JavaMail是可选包,因此如果需要使用的话你需要首先从java官网上下载.目前最新版本是JavaMail1.5.0,下面我们来看看javamail发送带附件的邮件实例 mail.java 代码: 复制代码 代码如下: package mail;