JavaMail SUN。。好吧,Oracle提供的电子邮件相关接口,随便写点备忘:
简介:
四个常用协议:SMTP、POP、IMAP、MIME
SMTP:帮每一台计算机找到下一个目标地址,发送和转发用得。
POP:邮局协议,用于电子邮件接收。邮件服务器上的邮件会在转发到客户端之后被删除。用TCP传输。是一个离线协议。
IMAP:因特网信息访问协议。消息存储在远程服务器上,通过客户端操作远程服务器。IMPA提供在线、离线、无连接三种形式。可以多台计算机共同访问维护一个邮箱 *也是主要用得。
MIME:多用途互联网邮件扩展? 好复杂的名字。用于指定是什么类型以及要用什么东西打开的那么一种东西。。(大概)不用管它。
注:J2EE.jar 包种包含javamail (也包含OneToMany。。。)
核心类:Session、Message、Address、Authenticator、Transport、Store、Folder。
Session:主要基于这个会话操作邮件。定义了基本的邮件会话。Session需要Properties来获取所需要的信息。类构造方法私有,所以用得时候需要调用getDefaultInstance(静态工厂方法)来获取Session实例。
Authenticator:抽象类,用于认证。
Properties props = new Properties();
//填充,比方说:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
props.load(classLoader.getResourceAsStream("文件名.properties"));
//创建session 无授权的写法
Session sessionWithoutAuth = Session.getDefaultInstacne(props,null);
//有授权的写法
Session sessionWithAuth = Session.getDefaultInstance(props,new Authenticator(){
//需要重写 getPasswordAuthentication() 方法,返回PasswordAuthentication对象。
@Override
protectrd PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(【用户名】,【密码】);
}
});
好的,Session得到了。
Message:用户构造邮件信息体的抽象类。Sun提供了一个封装好的子类MimeMessage。信息头只能使用US-ASCII字符。有好多构造方法,最基本的只需要传入Session。
MimeMessage message = new MimeMessage(sessionWithAuth);
建立Message之后,需要填充邮件的各个部分:
小知识~ 邮件包含哪些部分呢?
邮件头,邮件体(我猜的)
邮件头应该包含发件人、收件人、主题、时间、MIME版本、邮件内容类型等等。
邮件体应该就是邮件本身了。由Content_type域指出邮件体的类型。(比如说 text/plain,text/html 还有multipart之类的。)
具体暂时不表。。
第一步,设置邮件标题
message.setSubject(标题);
第二步,设置邮件来源
message.setFrom(new InternetAddress(邮件FROM));//不要在意那个InternetAddress....
第三部,设置收件人
有三个关键的东西(常量):
Message.RecipientType.TO 邮件接收者
Message.RecipientType.CC 邮件CC者
Message.RecipientType.BCC 邮件BCC者
这时候会用到邮件地址类Address
//也可以new一个Address类
//Address address = new InternetAddress("xxx@test.com")
//不过我比较懒,喜欢用InternetAddress.parse();
message.setRecipients(
Message.RecipientType.TO, InternetAddress.parse("TO邮件地址",false);//别问我false是干嘛的
);
message.addRecipients(
Message.RecipientType.CC, InternetAddress.parse("CC邮件地址",false);
);
message.addRecipients(
Message.RecipientType.BCC, InternetAddress.parse("BCC邮件地址",false);
};
第四步,设置正文
简单的设置方法:
message.setContent("正文内容","text/plain");//等价于 message.setText("正文内容");
复杂一点的:
//添加文字
MimeBodyPart messagebodyPart = new MimeBodyPart();
message.BodyPart.setContent("正文","text/html: charset=utf-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagebodyPart);
//添加文件:
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("文件源");
messageBodyPart.setDataHandler(new DataHandler(source));
String fileName = new String("文件名");
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
//设置到Conotent中
message.setContent(multipart);
OK,标题和邮件体都搞定之后就可以开始发送了。
发送会用到这个类:
Transport
他提供了一个静态方法
Transprot.send(message);
当然也可以复杂一点:
Transport transport = sessionWithAuth.getTransoprt();
transport.connect();
transprot.sendMessage(message,message.getReciptients(Message.recipentType.TO));
transprot.close();//记得关是好习惯
发出去了。 收工。