用Java发送图文并茂的HTML邮件

翻译|其它|编辑:郝浩|2008-06-18 11:54:06.000|阅读 1240 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

package com.syj;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
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.MimeMessage;

import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;

import com.sun.istack.internal.ByteArrayDataSource;

/**
* <P>
* Title:用java发送邮件的例子
* </P>
*
* <P>
* Description:发送图片附件并在html中使用该图片
* </P>
*
* <P>
* Copyright: Copyright (c) 2007
* </P>
*
* @author 孙钰佳
* @main sunyujia@yahoo.cn
* @date Jun 10, 2008 12:35:26 AM
*/
public class SendMail {
  private static String username = "xxxx";
  private static String password = "xxxx";
  private static String smtpServer = "smtp.163.com";
  private static String fromMailAddress = "xxxx@163.com";
  private static String toMailAddress = "sunyujia@yahoo.cn";

  public static void main(String[] args) throws Exception {
    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", smtpServer);
    // 获得邮件会话对象
    Session session = Session.getDefaultInstance(props,
    new SmtpAuthenticator(username, password));
    /** *************************************************** */
    // 创建MIME邮件对象
    MimeMessage mimeMessage = new MimeMessage(session);
    mimeMessage.setFrom(new InternetAddress(fromMailAddress));// 发件人
    mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toMailAddress));// 收件人
    mimeMessage.setSubject("主题");
    mimeMessage.setSentDate(new Date());// 发送日期
    Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
    /** *************************************************** */
    BodyPart bodyPart = new MimeBodyPart();// 正文
    bodyPart.setDataHandler(new DataHandler("测<img src="cid:IMG1" />试", "text/html;charset=GBK"));// 网页格式
    /** *************************************************** */
    BodyPart attachBodyPart = new MimeBodyPart();// 普通附件
    FileDataSource fds = new FileDataSource("c:/boot.ini");
    attachBodyPart.setDataHandler(new DataHandler(fds));
    attachBodyPart.setFileName("=?GBK?B?" + new sun.misc.BASE64Encoder().encode(fds.getName().getBytes()) + "?=");// 解决附件名中文乱码
    mp.addBodyPart(attachBodyPart);
    /** *************************************************** */
    MimeBodyPart imgBodyPart = new MimeBodyPart(); // 附件图标
    byte[] bytes = readFile("C:/button.gif");
    ByteArrayDataSource fileds = new ByteArrayDataSource(bytes, "application/octet-stream");
    imgBodyPart.setDataHandler(new DataHandler(fileds));
    imgBodyPart.setFileName("button.gif");
    imgBodyPart.setHeader("Content-ID", "<IMG1></IMG1>");// 在html中使用该图片方法src="cid:IMG1" mp.addBodyPart(imgBodyPart);
    /** *************************************************** */
    mp.addBodyPart(bodyPart);
    mimeMessage.setContent(mp);// 设置邮件内容对象
    Transport.send(mimeMessage);// 发送邮件

  }

  /**
  * 读取文件
  *
  * @param file
  * 文件路径
  * @return 返回二进制数组
  */
  public static byte[] readFile(String file) {
    FileInputStream fis = null;
    ByteArrayOutputStream bos = null;
    try {
      fis = new FileInputStream(file);
      bos = new ByteArrayOutputStream();
      int bytesRead;
      byte buffer[] = new byte[1024 * 1024];
      while ((bytesRead = fis.read(buffer)) != -1) {
        bos.write(buffer, 0, bytesRead);
        Arrays.fill(buffer, (byte) 0);
      }
    } catch (IOException e1) {
      e1.printStackTrace();
    } finally {
      try {
        if (bos != null)
          bos.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    return bos.toByteArray();
  }
}

/**
* Smtp认证
*/
class SmtpAuthenticator extends Authenticator {
  String username = null;
  String password = null;

  // SMTP身份验证
  public SmtpAuthenticator(String username, String password) {
    this.username = username;
    this.password = password;
  }

  public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(this.username, this.password);
  }

}
标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:CSDN

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP