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

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);

	}



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值