您的位置:首页 > 编程语言 > Java开发

java邮件开发--心得5-java编写复杂的电子邮件

2013-01-23 18:42 337 查看
     1. 前面介绍了如何编写一个简单的电子邮件,这里再介绍一个编写复杂的电子邮件的案例,该电子邮件包括附件和html文本内容两部分;邮件主要内容和功能如下,下面请看具体案例和注释分析:



package com.csdn.itcast;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class Demo3 {

/**
* @param args
* 复杂邮件的编写
*/
public static void main(String[] args) throws Exception{

Message msg = new MimeMessage(Session.getInstance(new Properties()));

/*这里用到了sun公司提供的编码工具类MimeUtility的encondeText()方法,来进行中文的编码;"\""是双引号的转义字符
* 邮件里的中文处理编码是以 =?  开头  ?= 结尾的base64编码的,中间要用两个问号隔开编码类型和中文编过码的内容;
*比如: =?UTF-8?B?tKvWx7Klv80=?=  ;编译过来是”传智播客“的意思。
*/
msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText("杨凯专属频道") + "\" <itcast_test@sina.com>"));
msg.setSubject("杨凯专属频道报道:黑马老师都很给力!");
msg.setReplyTo(new Address[]{new InternetAddress("yang@163.com")});
msg.setRecipients(RecipientType.TO,InternetAddress.parse(MimeUtility.encodeText("黎活明") + " <llm@itcast.cn>," + MimeUtility.encodeText("张孝祥") + " <zxx@itcast.cn>"));

//最外面的即第一层框架,由附件和内容组成
//这里传入的值是subtype即子类型mixed,不能是multipart/mixed;因为你new出的就是MimeMultipart
MimeMultipart msgMultipart = new MimeMultipart("mixed");
msg.setContent(msgMultipart);

//attach1和attach2代表附件1和2,content代表内容
MimeBodyPart attach1 = new MimeBodyPart();
MimeBodyPart attach2 = new MimeBodyPart();
MimeBodyPart content = new MimeBodyPart();

msgMultipart.addBodyPart(attach1);
msgMultipart.addBodyPart(attach2);
msgMultipart.addBodyPart(content);

//设置附件的值
attach1.setDataHandler(new DataHandler(new FileDataSource("resource\\Java培训.txt")));
attach1.setFileName(MimeUtility.encodeText("java培训.txt"));
attach2.setDataHandler(new DataHandler(new FileDataSource("resource\\people.gif")));
attach2.setFileName("people.gif");

//设置内容的值,第二层框架,有html文本和gif图片组成
MimeMultipart bodyMultipart = new MimeMultipart("related");
//这里一定要注意,是设置内容content的内容而不是msg卫星的内容,否则会把上面设置的覆盖掉
content.setContent(bodyMultipart);

MimeBodyPart htmlPart = new MimeBodyPart();
MimeBodyPart gifPart = new MimeBodyPart();

bodyMultipart.addBodyPart(htmlPart);
bodyMultipart.addBodyPart(gifPart);

//设置图片的值
gifPart.setDataHandler(new DataHandler(new FileDataSource("resource\\welcome.gif")));
gifPart.setHeader("Content-Location", "http://www.itcast.cn/logo.gif");
//设置html文本的值
htmlPart.setContent("欢迎来到杨凯专属频道,这是我自己用程序生成和发送的邮件哦!<img src='resource\\welcome.gif'>"
,"text/html;charset=UTF-8");

msg.saveChanges();

//此处不使用方法链的原因是:如果发送的邮件特别多,用一个for循环实现,那么如果不关闭资源的话会造成内存泄露
OutputStream ops = new FileOutputStream("resource\\yk.eml");
msg.writeTo(ops);
ops.close();

}

}

2. base64编码转换工具

package cn.itcast.javamail2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import sun.misc.BASE64Encoder;

public class Base64Util {

/**
* @param args add by zxx ,Dec 30, 2008
* @throws IOException
*/
public static void main(String[] args) throws IOException {

BASE64Encoder encoder = new BASE64Encoder();
System.out.println("please input user name:");
String username = new BufferedReader(
new InputStreamReader(System.in))
.readLine();
System.out.println(encoder.encode(username.getBytes()));
System.out.println("please input password:");
String password = new BufferedReader(
new InputStreamReader(System.in))
.readLine();
System.out.println(encoder.encode(password.getBytes()));
}

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: