JavaMail API中文文档
- 格式:doc
- 大小:32.50 KB
- 文档页数:4
Java Servlet API说明文档(2.1a版)(一)/Info/121/Info37231/译者前言:近来在整理有关Servlet资料时发现,在网上竟然找不到一份中文的Java Servlet API的说明文档,而在有一本有关JSP的书后面附的Java Servlet API说明竟然不全,而这份文档的2.1a版在1998年的11月份就已定稿。
所以我决定翻译一份中文的文档(其中一些与技术关系不大的部分已被略去),有兴趣的读者可以从/products/servlet/2.1/servletspec-2.1.zip下载原文阅读。
Java Servlet API说明文档(2.1a版)1998年11月绪言这是一份关于2.1版Java Servlet API的说明文档,作为对这本文档的补充,你可以到/products/servlet/index.html下面下载Javadoc格式的文档。
谁需要读这份文档这份文档描述了Java Servlet API的最新版本2.1版。
所以,这本书对于Servlet 的开发者及servlet引擎的开发者同样适用。
Java Servlet API的组成Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。
这两个软件包的同时存在使得Java Servlet API能够适应将来的其他请求-响应的协议。
这份文档以及刚才提及的Javadoc格式的文档都描述了这两个软件包,Javadoc 格式的文档还描述了你应该如何使用这两个软件包中的所有方法。
有关规范你也许对下面的这些Internet规范感兴趣,这些规范将直接影响到Servlet API的发展和执行。
你可以从/7c/in-notes/rfc/.cache找到下面提到的所有这些RFC规范。
RFC1738统一资源定位器(URL)RFC1808相关统一资源定位器RFC1945超文本传输协议--HTTP/1.0RFC2045多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第一部分:Internet信息体格式RFC2046多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第二部分:媒体类型RFC2047多用途网际邮件扩充协议(MIME)(多用途Internet邮件扩展)第三部分:信息标题扩展用于非ASCII文本RFC2048多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第四部分:注册步骤RFC2049多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第五部分:一致性标准和例子RFC2068超文本传输协议--HTTP/1.1RFC2069一个扩展HTTP:摘要访问鉴定RFC2109HTTP状态管理机制RFC2145HTTP版本号的使用和解释RFC2324超文本Coffee Pot控制协议(HTCPCP/1.0)万维网协会()管理着这些协议的规范和执行。
JavaMail快速入门——使用JavaMail APls发送和接收
Email
TonyLoton; 郑涛
【期刊名称】《《程序员:CSDN开发高手》》
【年(卷),期】2004(000)002
【摘要】本文中Tony Loton将带你走上开发基于Java的。
Email应用的第一步,如果你喜欢创建自己的Email客户端程序而不是用Microsoft Outlook,或者喜欢
建一个基于Web的Email系统而不用诸如Hotmail之类的东西,那么本文正是
你所需要的。
为了从一个不同寻常的角度来审视JavaMail潜在的能力。
【总页数】7页(P78-84)
【作者】TonyLoton; 郑涛
【作者单位】
【正文语种】中文
【中图分类】TP393.098
【相关文献】
1.例题53 基于JavaMail API的邮件接收 [J], 左瑞欣
2.基于JavaMail API的邮件认证与接收 [J], 钟忺;刘春燕
3.使用JavaMail/JAF开发中文邮件系统的关键技术研究 [J], 袁梅冷;聂哲
4.一种使用JavaMail的邮件直接发送方法及其实现 [J], 沈洪良;朱国进
5.应用JavaMail接收和发送E-mail [J], 魏钢
因版权原因,仅展示原文概要,查看原文内容请购买。
javaapi帮助文档chm1java api 帮助文档chm 1.5 1.6 中文版英文版Sun 公司提供的Java API Docs是学习和使用Java语言中最经常使用的参考资料之一。
但是长期以来此文档只有英文版,对于中国地区的Java开发者来说相当的不便。
目前Sun 公司正在组织多方力量将此文档翻译成中文,并于2005年10月31日在Sun 中国技术社区(/doc/ba14186412.html,/)正式发布第一批中文版Java API文档(包括/doc/ba14186412.html,ng和java.util 类库API 文档的中文版)。
经过将近10个月的努力,目前我们已经将Java SE 5.0的全部API文档中文化。
开发人员可以通过Sun 中国技术社区的网站在线浏览相关文档,也可以将全部文档下载到本地以方便检索和使用。
J2SE DK & API下载-------------------------/doc/ba14186412.html,/j2se/1.3/dow nload.html/doc/ba14186412.html,/j2se/1.4.2/do wnload.html/doc/ba14186412.html,/javase/downl oads/index_jdk5.jsp/doc/ba14186412.html,/javase/downl oads/index.jspJ2EE DK & API下载-------------------------/doc/ba14186412.html,/j2ee/1.3/inde x.jsp/doc/ba14186412.html,/j2ee/1.3/dow nload.html/doc/ba14186412.html,/j2ee/1.4/inde x.jsp/doc/ba14186412.html,/j2ee/1.4/dow nload.html/doc/ba14186412.html,/javaee/downl oads/index.jspJDK1.6API中文版(全)-------------------------* HTML 格式(在线英文) /doc/ba14186412.html,/javase/6/docs/ * HTML 格式(在线中文) /doc/ba14186412.html,/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/ind ex.html* zip 格式(中文) /doc/ba14186412.html,/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_zh_CN.zip * CHM 格式(中文) /doc/ba14186412.html,/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/chm/JDK_API_1_6_zh_CN.CHMJDK1.5API中文版(全)-------------------------* HTML 格式(在线英文) /doc/ba14186412.html,/javase/5/docs/ * HTML 格式(在线中文) /doc/ba14186412.html,/Java_Docs/html/z h_CN/api/index.html* zip 格式(中文) /doc/ba14186412.html,/Java_Docs/html_zh_CN.zip* CHM 格式(中文) /doc/ba14186412.html,/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/JDK_API_1_5_zh_CN.CH M 相关网站-------------------------/doc/ba14186412.html,/doc/ba14186412.html,//doc/ba14186412.html,/downloads/ /doc/ba14186412.html,/javaee/downl oads//doc/ba14186412.html,/javase/downl oads/随着开始全面接触JavaAPI,现在人手一份中文版的JavaAPI文档(java-docs-api-cn.zip),在写代码的过程中需要经常查阅。
javaMail邮件接收解析内容及附件及删除邮件使⽤javaMail获取邮件内容。
⼯具类可直接使⽤。
package com.szy.project.utils;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Properties;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Flags;import javax.mail.Folder;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Part;import javax.mail.Session;import javax.mail.Store;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;/*** 邮件接受测试**//*** 使⽤POP3协议接收邮件*/public class POP3ReceiveMailTest {public static void main(String[] args) throws Exception {resceive();}/*** 接收邮件*/public static void resceive() throws Exception { /** * 因为现在使⽤的是163邮箱⽽163的 pop地址是 端⼝是 110 * ⽐如使⽤好未来企业邮箱就需要换成好未来邮箱的 pop服务器地址 和端⼝110 */ String duankou = "110"; // 端⼝号 String servicePath = ""; // 服务器地址// 准备连接服务器的会话信息Properties props = new Properties();props.setProperty("mail.store.protocol", "pop3"); // 使⽤pop3协议props.setProperty("mail.pop3.port", duankou); // 端⼝props.setProperty("mail.pop3.host", servicePath); // pop3服务器// 创建Session实例对象Session session = Session.getInstance(props);Store store = session.getStore("pop3");store.connect("157********@", "***********"); //163邮箱程序登录属于第三⽅登录所以这⾥的密码是163给的授权密码⽽并⾮普通的登录密码// 获得收件箱Folder folder = store.getFolder("INBOX");/* Folder.READ_ONLY:只读权限* Folder.READ_WRITE:可读可写(可以修改邮件的状态)*/folder.open(Folder.READ_WRITE); //打开收件箱// 由于POP3协议⽆法获知邮件的状态,所以getUnreadMessageCount得到的是收件箱的邮件总数System.out.println("未读邮件数: " + folder.getUnreadMessageCount());// 由于POP3协议⽆法获知邮件的状态,所以下⾯得到的结果始终都是为0System.out.println("删除邮件数: " + folder.getDeletedMessageCount());System.out.println("新邮件: " + folder.getNewMessageCount());// 获得收件箱中的邮件总数System.out.println("邮件总数: " + folder.getMessageCount());// 得到收件箱中的所有邮件,并解析Message[] messages = folder.getMessages();parseMessage(messages);//得到收件箱中的所有邮件并且删除邮件deleteMessage(messages);//释放资源folder.close(true);store.close();}/*** 解析邮件* @param messages 要解析的邮件列表*/public static void parseMessage(Message ...messages) throws MessagingException, IOException {if (messages == null || messages.length < 1)throw new MessagingException("未找到要解析的邮件!");// 解析所有邮件for (int i = 0, count = messages.length; i < count; i++) {MimeMessage msg = (MimeMessage) messages[i];System.out.println("------------------解析第" + msg.getMessageNumber() + "封邮件-------------------- ");System.out.println("主题: " + getSubject(msg));System.out.println("发件⼈: " + getFrom(msg));System.out.println("收件⼈:" + getReceiveAddress(msg, null));System.out.println("发送时间:" + getSentDate(msg, null));System.out.println("是否已读:" + isSeen(msg));System.out.println("邮件优先级:" + getPriority(msg));System.out.println("是否需要回执:" + isReplySign(msg));System.out.println("邮件⼤⼩:" + msg.getSize() * 1024 + "kb");boolean isContainerAttachment = isContainAttachment(msg);System.out.println("是否包含附件:" + isContainerAttachment);if (isContainerAttachment) {saveAttachment(msg, "f:\\mailTest\\"+msg.getSubject() + "_"+i+"_"); //保存附件}StringBuffer content = new StringBuffer(30);getMailTextContent(msg, content);System.out.println("邮件正⽂:" + (content.length() > 100 ? content.substring(0,100) + "..." : content)); System.out.println("------------------第" + msg.getMessageNumber() + "封邮件解析结束-------------------- "); System.out.println();}}/*** 解析邮件* @param messages 要解析的邮件列表*/public static void deleteMessage(Message ...messages) throws MessagingException, IOException {if (messages == null || messages.length < 1)throw new MessagingException("未找到要解析的邮件!");// 解析所有邮件for (int i = 0, count = messages.length; i < count; i++) {/*** 邮件删除*/Message message = messages[i];String subject = message.getSubject();// set the DELETE flag to truemessage.setFlag(Flags.Flag.DELETED, true);System.out.println("Marked DELETE for message: " + subject);}}/*** 获得邮件主题* @param msg 邮件内容* @return 解码后的邮件主题*/public static String getSubject(MimeMessage msg) throws UnsupportedEncodingException, MessagingException { return MimeUtility.decodeText(msg.getSubject());}/*** 获得邮件发件⼈* @param msg 邮件内容* @return 姓名 <Email地址>* @throws MessagingException* @throws UnsupportedEncodingException*/public static String getFrom(MimeMessage msg) throws MessagingException, UnsupportedEncodingException {String from = "";Address[] froms = msg.getFrom();if (froms.length < 1)throw new MessagingException("没有发件⼈!");InternetAddress address = (InternetAddress) froms[0];String person = address.getPersonal();if (person != null) {person = MimeUtility.decodeText(person) + "";} else {person = "";}from = person + "<" + address.getAddress() + ">";return from;}/*** 根据收件⼈类型,获取邮件收件⼈、抄送和密送地址。
今天一下午都在整java的api。 我的目标是在eclipse平台中用鼠标点击java的api就会自动显示出中文的注释。并且能在help中方便地搜索java的api。 这其实是使用bada开发平台后留下的后遗症。
图1.就是想要这个效果 最终结果是没有得到满意答案,发现最方便的方法还是另外开一个chm中文api文档。 下面我讲述一下整个下午我的三个收获。
一:首先是获取演示程序和英文api(就是java本身提供的接口文件,
Application Programming Interface,应用程序编程接口)
在安装jdk(java development kit)的时候,会遇到一个自定义安装的步骤,这里有4个安装可选。有几个是默认安装的。4个分别是标准开发工具,演示程序及样例,Api,数据库。 在鼠标点到的位置上单击(忘了左键还是右键)会有一个选项框,可以决定安装或不安装对应功能。下面"更改"可以改变安装路径。 图2.安装选项框 把中间两个功能选中就可以在安装完成后在根目录中看到两个文件夹Sample和Demo。里面就是示例程序。
图3,安装后出现的文件夹 并且可以在eclipse中把鼠标移到api自带方法时会弹出api说明。 图4,弹出api说明 二:在Eclipse帮助文档中加入API_doc文档。 首先下载API_doc文档。 地址:http://ishare.iask.sina.com.cn/f/7140029.html (2012.6.13) (感谢无偿贡献的网友) 文件有点大30M且只支持浏览器下载。
之后就是 ||在eclipse/plugins/下建立一个目录org.sun.java.doc.sdk_1.5.0,然后在这个目录下创建两个文件 plugin.xml 和toc.xml。 plugin.xml文件内容: id="org.sun.java.doc.sdk" name="Java 2 SDK Doc" version="1.5.0" provider-name="sun.org"> toc.xml文件内容: 然后将下载的jdk1_50doc.zip改名为doc.zip后放在与刚创建的两个文件相同目录下。注意,文件名一定要是doc.zip,zip 文件里面应该有这样的目录层次结构:jdk1_50doc/index.html 然后重启Eclipse即可在帮助文档中看到api|| (竖线分隔部分转自博客园Byron lee:
JavaMail⼊门第四篇接收邮件上⼀篇中,我们学会了如何⽤JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了⼀些专门的类来对邮件的接收进⾏相关的操作,在介绍这些类之前,我们先来了解下邮件接收API的体系结构,JavaMail API中定义了⼀个java.mail.Store类,它⽤于执⾏邮件的接收任务,我们在程序中调⽤这个类中的⽅法可以获取邮箱中的各个邮件夹的信息。
JavaMail使⽤Folder对象表⽰邮件夹,通过Folder对象的⽅法可以获取邮件夹中的所有邮件信息,⽽我们知道邮件的信息可以使⽤Message对象来表⽰,Message类中就包含了操作邮件的各种⽅法了,例如获取邮件的发送者,主题,正⽂内容,发送时间等,它们⼯作关系如下:1、从Session对象中获得实现了某种邮件发送协议的Store对象;2、登录邮箱,连接上POP3或者IMAP4服务器;3、调⽤Store的getFolder⽅法,获取邮箱中的某个邮件夹的Folder对象;4、调⽤Folder对象中的getMessage或getMessages⽅法,获取邮件夹中的某⼀封邮件或者是所有邮件,每⼀封的邮件以⼀个Message对象返回。
接下来我们⽤以上类来接收邮件1import java.util.Properties;23import javax.mail.Address;4import javax.mail.Folder;5import javax.mail.Message;6import javax.mail.Session;7import javax.mail.Store;89class MailReceives {10public static void main(String[] args) throws Exception {11// 定义连接POP3服务器的属性信息12 String pop3Server = "";13 String protocol = "pop3";14 String username = "123456@";15 String password = "****************"; // QQ邮箱的SMTP的授权码,1617 Properties props = new Properties();18 props.setProperty("mail.transport.protocol", protocol); // 使⽤的协议(JavaMail规范要求)19 props.setProperty("mail.smtp.host", pop3Server); // 发件⼈的邮箱的 SMTP服务器地址2021// 获取连接22 Session session = Session.getDefaultInstance(props);23 session.setDebug(false);2425// 获取Store对象26 Store store = session.getStore(protocol);27 store.connect(pop3Server, username, password); // POP3服务器的登陆认证2829// 通过POP3协议获得Store对象调⽤这个⽅法时,邮件夹名称只能指定为"INBOX"30 Folder folder = store.getFolder("INBOX");// 获得⽤户的邮件帐户31 folder.open(Folder.READ_WRITE); // 设置对邮件帐户的访问权限3233 Message[] messages = folder.getMessages();// 得到邮箱帐户中的所有邮件3435for (Message message : messages) {36 String subject = message.getSubject();// 获得邮件主题37 Address from = (Address) message.getFrom()[0];// 获得发送者地址38 System.out.println("邮件的主题为: " + subject + "\t发件⼈地址为: " + from);39 System.out.println("邮件的内容为:");40 message.writeTo(System.out);// 输出邮件内容到控制台41 }4243 folder.close(false);// 关闭邮件夹对象44 store.close(); // 关闭连接对象45 }46 }控制台输出结果:可以看到控制台输出的是邮件的原始内容,还未被解析,所以需要经过解析才能阅读,下⼀篇将讲解如何解析邮件。
java 解析mail 抄送如果你想要在 Java 中解析电子邮件中的 "抄送"(CC)部分,你可以使用Java Mail API。
下面是一个简单的示例,展示如何使用 Java Mail API 来解析一个 MIME 格式的电子邮件,并提取 "抄送" 部分:```javaimport ;import ;import ;public class EmailCCExtractor {public static void main(String[] args) throws MessagingException { // 假设邮件存储在 "" 这个文件夹中,邮件地址是 "",密码是 "your-password"String host = "";String username = "";String password = "your-password";String emailId = username; // 使用你的邮件地址Properties properties = new Properties();("", "imap");("", host);("", "993"); // 使用 IMAP 的端口号("", "true"); // 启用 SSL// 创建会话对象Session session = (properties, null);Store store = ("imap");(username, password);// 获取收件箱文件夹Folder inboxFolder = ("INBOX");(_ONLY);// 获取收件箱中的所有邮件,并遍历它们以提取抄送者 Message[] messages = ();for (Message message : messages) {// 获取邮件的主题和抄送者列表String subject = ();List<InternetAddress> ccList = 抄送Addresses(message);if (ccList != null) {for (InternetAddress cc : ccList) {("抄送者: " + ());}} else {("没有找到抄送者");}}// 关闭文件夹和会话对象(false);();}}```这个示例假设你使用的是 IMAP 协议,并且邮件存储在名为 "" 的服务器上的 "INBOX" 文件夹中。
elasticsearch7版本java api中文详解Elasticsearch是一个分布式、实时的搜索和分析引擎,它具有高性能、可扩展性和强大的全文搜索功能。
Java API是Elasticsearch提供的一组Java开发接口,用于与Elasticsearch集群进行交互。
本文将详细解释Elasticsearch7版本Java API的使用方法和相关注意事项。
一、依赖配置在使用Elasticsearch7版本的Java API之前,首先要确保在项目配置文件中添加正确的依赖项。
一般情况下,我们需要添加以下两个依赖项:```xml<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.0.0</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.0.0</version></dependency>```这两个依赖项分别提供了Elasticsearch的核心功能和高级客户端的支持,确保在使用Java API时能正常操作和访问Elasticsearch集群。
二、连接Elasticsearch集群在开始使用Java API之前,我们需要先与Elasticsearch集群建立连接。
连接的方式有两种:1. TransportClient方式(Deprecated)```javaTransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(newTransportAddress(InetAddress.getByName("localhost"), 9300));```这种方式已经被官方宣布为过时(Deprecated),建议使用High-Level REST Client方式进行连接。
.JavaMail APIJavaMail API的核心类:会话、消息、地址、验证程序、传输,存储和文件夹。
所有这些类都可以在JavaMail API即javax.mail的顶层包中找到,尽管你将频繁地发现你自己使用的子类是在javax.mail.internet包中找到的。
A.SessionSession类定义了基本的邮件会话。
就像Http会话那样,我们进行收发邮件的工作都是基于这个会话的。
Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。
Session类的构造方法是私有的,所以我们可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象:Properties props = new Properties();// fill props with any informationSession session = Session.getDefaultInstance(props, null);---------------------------------------------------------------------------------------------或者使用getInstance()这个静态工厂方法获得自定义的Session:Properties props = new Properties();// fill props with any informationSession session = Session.getInstance(props, null);getDefaultInstance()和getInstance()方法的第二个参数都是null,这是因为在上面的例子中并没有使用到邮件授权,下文中将对授权进行详细介绍。
从很多的实例看,在对mail server进行访问的过程中使用共享的Session是足够的,即使是工作在多个用户邮箱的模式下也不例外。
B.Message当我们建立了Session对象后,便可以被发送的构造信息体了。
在这里SUN提供了Message类型来帮助开发者完成这项工作。
由于Message是一个抽象类,大多数情况下,我们使用javax.mail.internet.MimeMessage这个子类,该类是使用MIME类型、MIME 信息头的邮箱信息。
信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。
为了建立一个MimeMessage对象,我们必须将Session对象作为MimeMessage构造方法的参数传入:MimeMessage message = new MimeMessage(session);注意:对于MimeMessage类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。
在建立了MimeMessage对象后,我们需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接口。
使用setSubject()方法对邮件设置邮件主题:message.setSubject("Title");基本的设置信息内容的方法就是通过表示信息内容和MIME类型的参数调用setContent()方法:message.setContent("Hello", "text/plain");然而,如果我们所使用的MimeMessage中信息内容是文本的话,我们便可以直接使用setText()方法来方便的设置文本内容。
message.setText("Hello");前面所讲的两种方法,对于文本信息,后者更为合适。
而对于其它的一些信息类型,比如HTML信息,则要使用前者。
C.Address至此,已经建立了Session和Message,下面将介绍如何使用邮件地址类:Address。
像Message一样,Address类也是一个抽象类,所以我们将使用javax.mail.internet.InternetAddress这个子类。
通过传入代表邮件地址的字符串,我们可以建立一个邮件地址类:Address address = new InternetAddress("xx@");如果要在邮件地址后面增加名字的话,可以通过传递两个参数:代表邮件地址和名字的字符串来建立一个具有邮件地址和名字的邮件地址类:Address address = new InternetAddress("xx@", "Alvin");本文在这里所讲的邮件地址类是为了设置邮件信息的发信人和收信人而准备的,在建立了邮件地址类后,我们通过message的setFrom()和setReplyTo()两种方法设置邮件的发信人:message.setFrom(address);message.setReplyTo(address);若在邮件中存在多个发信人地址,我们可用addForm()方法增加发信人:Address address[] = ...;message.addFrom(address);为了设置收信人,我们使用addRecipient()方法增加收信人,此方法需要使用Message.RecipientType的常量来区分收信人的类型:message.addRecipient(type, address);下面是Message.RecipientType的三个常量:Message.RecipientType.TOMessage.RecipientType.BCC因此,如果我们要发送邮件给A,并发用一个副本给B,下面的方法将被用到:Address toAddress = new InternetAddress("A@");Address ccAddress = new InternetAddress("B@"); message.addRecipient(Message.RecipientType.TO, toAddress); message.addRecipient(, ccAddress); JavaMail API并没有提供检查邮件地址有效性的机制。
当然我们可以自己完成这个功能:验证邮件地址的字符是否按照RFC822规定的格式书写或者通过DNS服务器上的MX记录验证等。
E.Authenticator像类那样,JavaMail API通过使用授权者类(Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。
在javax.mail包中可以找到这个JavaMail的授权者类(Authenticator)。
在使用Authenticator这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具有返回PasswordAuthentication对象(用于存储认证时要用到的用户名、密码)getPasswordAuthentication()方法。
并且要在Session中进行注册,使Session能够了解在认证时该使用哪个类。
下面代码片断中的MyAuthenticator就是一个Authenticator的子类。
Properties props = new Properties();// fill props with any informationAuthenticator auth = new MyAuthenticator();Session session = Session.getDefaultInstance(props, auth);F.Transport在发送信息时,Transport类将被用到。
这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:Transport.send(message);当然,方法是多样的。
我们也可由Session获得相应协议对应的Transport实例。
并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接:message.saveChanges();// implicit with send()Transport transport = session.getTransport("smtp");transport.connect(host, username, password);transport.sendMessage(message, message.getAllRecipients()); transport.close();评论:上面的方法是一个很好的方法,尤其是在我们在同一个邮件服务器上发送多个邮件时。
因为这时我们将在连接邮件服务器后连续发送邮件,然后再关闭掉连接。
send()这个基本的方法是在每次调用时进行与邮件服务器的连接的,对于在同一个邮件服务器上发送多个邮件来讲可谓低效的方式。
注意:如果需要在发送邮件过程中监控mail命令的话,可以在发送前设置debug标志:session.setDebug(true)。
G.Store和Folder接收邮件和发送邮件很类似都要用到Session。
但是在获得Session后,我们需要从Session中获取特定类型的Store,然后连接到Store,这里的Store代表了存储邮件的邮件服务器。
在连接Store的过程中,极有可能需要用到用户名、密码或者Authenticator。
// Store store = session.getStore("imap");Store store = session.getStore("pop3");store.connect(host, username, password);在连接到Store后,一个Folder对象即目录对象将通过Store的getFolder()方法被返回,我们可从这个Folder中读取邮件信息:Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Message message[] = folder.getMessages();上面的例子首先从Store中获得INBOX这个Folder(对于POP3协议只有一个名为INBOX的Folder有效),然后以只读(Folder.READ_ONLY)的方式打开Folder,最后调用Folder的getMessages()方法得到目录中所有Message的数组。