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("[email protected]") //不过我比较懒,喜欢用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();//记得关是好习惯
发出去了。 收工。