用Java发送图文并茂的HTML邮件
2008-06-10 01:59
567 查看
08/10/25修改增加了ByteArrayDataSource类源码。
package com.syj; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /** * * Title:用java发送邮件的例子 * * * * Description:发送图片附件并在html中使用该图片 * * * * Copyright: Copyright (c) 2007 * * * @author 孙钰佳 * @blog http://blog.csdn.net/sunyujia/ * @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", "");// 在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); } } class ByteArrayDataSource implements DataSource { private final String contentType; private final byte[] buf; private final int len; public ByteArrayDataSource(byte[] buf, String contentType) { this(buf, buf.length, contentType); } public ByteArrayDataSource(byte[] buf, int length, String contentType) { this.buf = buf; this.len = length; this.contentType = contentType; } public String getContentType() { if (contentType == null) return "application/octet-stream"; return contentType; } public InputStream getInputStream() { return new ByteArrayInputStream(buf, 0, len); } public String getName() { return null; } public OutputStream getOutputStream() { throw new UnsupportedOperationException(); } }
相关文章推荐
- 用Java发送图文并茂的HTML邮件
- pop3_用Java发送图文并茂的HTML邮件
- 用Java发送图文并茂的HTML邮件
- 用Java发送图文并茂的HTML邮件
- JAVA 发送邮件代码---发送HTML内容
- java 发送html格式邮件 样式混乱解决
- 用java实现的邮件系统六(javamail发送复杂邮件-带附件和html)
- EBS中使用JAVA方式发送HTML格式邮件
- Java邮件开发(二):使用JMail发送一封图文并茂且包含附件的邮件(上)
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html
- Java - HtmlEmail 邮件发送
- Java发送HTML格式的邮件
- EBS中使用JAVA方式发送HTML格式邮件
- java发送html邮件
- java HtmlEmail发送邮件工具类
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板
- EBS中使用JAVA方式发送HTML格式邮件
- EBS中使用JAVA方式发送HTML格式邮件
- Java发送带html标签内容的邮件实例代码