- 浏览: 858162 次
- 性别:
- 来自: 上海
最新评论
-
waterflow:
感谢分享
简单的ChartDirector生成图表例子 -
YQuite:
写到最后一种文件才看到这个,洼的一声哭了出来 - - !
java简单解析docx、pptx、xlsx文档 -
q394469902:
Android通过selector改变界面状态 -
db6623919:
直接粘贴别人帖子还是英文的,有意思?
实现RTSP协议的简单例子 -
ykou314:
请问下,这些超级命令,是否需要android root权限,尤 ...
Android系统在超级终端下必会的命令大全(七)
使用之前,必须了解的基本概念与核心类:Session是邮件操作的接口;Transport是收发邮件所
使用的协议,一般Session会有多个Transport;Message是收发操作的单位;Store是消息的集合,类
似邮件客户端。每个Store包含一系列的Folder和Message,每个Folder又包含一系列的Folder和Message。
属性名
|
含义
|
java,mail.smtp.user
|
SMTP的缺省用户名。
|
java,mail.smtp.host
|
|
java,mail.smtp.port
|
要连接的SMTP服务器的端口号,如果connect没有指明端口号就使用它,缺省值25。
|
java,mail.smtp.connectiontimeout
|
Socket连接超时值,单位毫秒,缺省值不超时。
|
java,mail.smtp.timeout
|
Socket I/O超时值,单位毫秒,缺省值不超时。
|
java,mail.smtp.from
|
|
java,mail.smtp.localhost
|
localhost名,缺省是InetAddress.getLocalHost().getHostName()。如果JDK和name service正确配置,一般不需设置。
|
java,mail.smtp.ehlo
|
如果为false,那么不会尝试使用EHLO命令登录,缺省是true。通常EHLO命令失败,会倒退到HELO命令。这个属性只有在服务器没有fail EHLO属性或没有实现EHLO属性。
|
java,mail.smtp.auth
|
缺省是false,如果为true,尝试使用AUTH命令认证用户。
|
java,mail.host
|
邮件交互的主机。
|
java,mail.transport.protocol
|
要装入session的协议(smtp、pop3、imap、nntp)。
|
java,mail.user
|
登录邮件服务器的用户名(发送邮件时需要)。
|
java,mail.from
|
发件人地址(发送邮件时需要)。
|
发送邮件
发送邮件主要涉及的类包括:Session、Transport和MimeMessage。如果发送带附件的邮件还会
涉及:MimeMultipart、DataSource和DataHandler。注意:以下的示例代码不带异常处理。
涉及:MimeMultipart、DataSource和DataHandler。注意:以下的示例代码不带异常处理。
- 发送不带附件的邮件:
Properties props= new Properties();
//如果使用connect包含用户名和密码
//仍然连接不上,那么有可能是这个属性没有设置。
//导致服务器不验证
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.auth", "true");
Session session= Session.getDefaultInstance( props);
//也可实现一个自定义的Authenticator,并调用
//getDefaultInstance(java.util.Properties props, Authenticator authenticator)
//来完成验证。个人觉得不如使用connect方便。
Transport transport= session.getTransport("smtp");
MimeMessage message= new MimeMessage( session);
InternetAddress from= new InternetAddress( "James.Hu@chinacodeline.com", "James.Hu");
message.setFrom( from);
InternetAddress to= new InternetAddress("foxgem_magic@yahoo.com.cn");
//指定收件人的类型
message.setRecipient( MimeMessage.RecipientType.TO, to);
message.setSubject( "This is a test.");
//文本内容,就直接使用这个函数。
//如果内容不是纯文本,那么使用setContent指定mime type。
message.setText( "检查文件");
//加上这句话表示邮件完成
message.saveChanges();
//连接并验证
transport.connect("mail.chinacodeline.com", "james.hu@chinacodeline.com", "密码");
transport.sendMessage( message, message.getAllRecipients());
transport.close();
|
- 发送带附件的邮件:
Properties props= new Properties();
props.put("mail.smtp.auth", "true");
Session session= Session.getDefaultInstance( props);
Transport transport= session.getTransport("smtp");
MimeMessage msg= new MimeMessage( session);
msg.setFrom( new InternetAddress( "james.hu@chinacodeline.com", "foxgem"));
msg.setRecipient( MimeMessage.RecipientType.TO
, new InternetAddress("foxgem_magic@yahoo.com.cn"));
msg.setSubject("mail with single file");
//把邮件内容看作多个组成部分,每部分分别组织自己的内容。最后
//通过这个类组合起来一起发出。
MimeMultipart content= new MimeMultipart();
MimeBodyPart part1= new MimeBodyPart();
part1.setText("pls check the file");
MimeBodyPart part2= new MimeBodyPart();
//附件如果是文件,一般都是使用FileDataSource
//如果是从其他方面获得,那么使用对应的DataSource。
//如,若是来自url,那么就使用URLDataSource
DataSource fileDs= new FileDataSource( "d:/test.txt");
DataHandler dh= new DataHandler( fileDs);
part2.setDataHandler( dh);
//标记为附件,否则当邮件客户端(如OE)收到后,直接在邮件中显示内容。
part2.setDisposition( MimeBodyPart.ATTACHMENT);
//设置附件的文件名
part2.setFileName( "test.txt");
content.addBodyPart( part1);
content.addBodyPart( part2);
msg.setContent( content);
msg.saveChanges();
transport.connect("mail.chinacodeline.com", "james.hu@chinacodeline.com", "密码");
transport.sendMessage( msg, msg.getAllRecipients());
transport.close();
|
接收邮件
接收邮件涉及的类:Session、Store、Folder和MimeMessage。如果发送带附件的邮件还会
涉及:MimeMultipart、DataSource和DataHandler。注意:以下的示例代码不带异常处理。
涉及:MimeMultipart、DataSource和DataHandler。注意:以下的示例代码不带异常处理。
- 接收不带附件的邮件:
Properties props= new Properties();
Session session= Session.getDefaultInstance( props);
Store store= session.getStore( "pop3");
store.connect( "pop.mail.yahoo.co.uk", "foxgem_magic", "密码");
//找到缺省的目录
Folder root= store.getDefaultFolder();
//也可指定打开的目录,如Folder inbox= root.getFolder( “inbox”);
Folder[] folders= root.list();
for( int j=0; j< folders.length; j++){
//打开folder
folders[j].open( Folder.READ_WRITE);
Message[] msgs= folders[j].getMessages();
for(int i=0; i< msgs.length; i++){
System.out.println( "subject:"+ msgs[i].getSubject());
System.out.println( "content:"+ msgs[i].getContent().toString());
}
//检查是否有新邮件。
System.out.println( folders[j].hasNewMessages());
folders[j].close( false);
}
store.close();
|
- 接收带附件的邮件:
Properties props= new Properties();
Session session= Session.getDefaultInstance( props);
Store store= session.getStore( "pop3");
store.connect( "pop.mail.yahoo.co.uk", "foxgem_magic", "密码");
Folder root= store.getDefaultFolder();
Folder[] folders= root.list();
for( int i=0; i< folders.length; i++){
folders[i].open( Folder.READ_ONLY);
Message[] msgs= folders[i].getMessages();
for( int j=0; j< msgs.length; j++){
Object content= msgs[j].getContent();
//注意Multipart并不是判定是否是附件的标准
if( content instanceof Multipart){
int count= ((Multipart)content).getCount();
for( int k=0; k< count; k++){
BodyPart part= ((Multipart)content).getBodyPart(k);
String disposition= part.getDisposition();
//判断是否是附件
if( null!= disposition &&
disposition.equalsIgnoreCase( Part.ATTACHMENT)){
BufferedReader br= new BufferedReader( new InputStreamReader(
part.getInputStream()));
for( String line= br.readLine(); null!= line; line= br.readLine()){
System.out.println( line);
}
}
}
}
}
}
store.close();
|
其他操作
接收和发送是最通常的邮件操作,除此之外,一般还有:
- 复制、删除和移动邮件:这些操作都必须要Folder以读写方式打开,且是在Folder关闭
之后起作用。
之后起作用。
//删除
folder.open(Folder.READ_WRITE);
message.setFlag(Flags.Flag.DELETED, true);
folder.close(true);
|
//移动,另一种形式的设置消息标志位。
inbox.copyMessages(xml_msgs, xml_dev);
Flags delete_flag = new Flags(Flags.Flag.DELETED);
inbox.setFlags(xml_msgs, delete_flag, true);
inbox.expunge();
|
考虑实现通过交互性更强的形式来进行这些操作,如显示邮件列表的web页,为了对指定
的邮件进行操作,需要使用Message的Message number。注意,它的值并不是一定,会因为其
他邮件(如另一人从另一个界面删除了一个邮件)的被删除而改变。因此,在实际使用时还
需要辅助其他的手段。
的邮件进行操作,需要使用Message的Message number。注意,它的值并不是一定,会因为其
他邮件(如另一人从另一个界面删除了一个邮件)的被删除而改变。因此,在实际使用时还
需要辅助其他的手段。
- 回复邮件
//false,只回复给发件人;true,是回复全体。
MimeMessage reply = (MimeMessage)message.reply(false);
reply.setFrom(new InternetAddress("president@whitehouse.gov"));
reply.setText("Thanks");
Transport.send(reply);
|
- 消息转发:创建一个新邮件的BodyPart,将要转发的消息复制到新邮件的一个BodyPart中。
2着结合成一个MultiPart,作为新邮件的内容发出。
2着结合成一个MultiPart,作为新邮件的内容发出。
Message forward = new MimeMessage(session);
forward.setSubject("Fwd: " + message.getSubject());
forward.setFrom(new InternetAddress(from));
forward.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
//创建新邮件的内容
Multipart multipart = new MimeMultipart();
//创建新邮件的BodyPart
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText( "Here you go with the original message:\n\n");
multipart.addBodyPart(messageBodyPart);
//复制要转发的邮件,
messageBodyPart = new MimeBodyPart();
//要将一条消息内容复制到另一条,只要复制DataHandler就可以了
messageBodyPart.setDataHandler(message.getDataHandler());
multipart.addBodyPart(messageBodyPart);
forward.setContent(multipart);
Transport.send(forward);
|
- 查找邮件,使用SearchTerm来进行。具体的SearchTerm查看相应的文档。
SearchTerm to = new RecipientStringTerm(Message.RecipientType.TO,
"xml.dev@lists.xml.org");
SearchTerm cc = new RecipientStringTerm(Message.RecipientType.CC,
"xml.dev@lists.xml.org");
SearchTerm xml_search = new OrTerm(to, cc);
Messages[] xml_msgs = inbox.search(xml_search);
|
- 邮件的编码主要用于非英文的支持。(注意,上述的例子中有中文,但是没有这么做就
成功地接收并显示了中文文字的内容。具体的使用还有待尝试)
成功地接收并显示了中文文字的内容。具体的使用还有待尝试)
编码:
String foreign_str = ".....";
String usable_str = MimeUtility.encodeText(foreign_str);
message.setText(usable_str);
解码:
String msg_str = message.getText();
String foreign_str = MimeUtility.decodeText(msg_str);
textfield.setText(foreign_str);
|
发表评论
-
(转)Java中关于空格替换的正则表达式,实例代码
2011-04-10 20:32 5754句点符号 . 是通配符 , ... -
ubuntu 安装 jdk 1.5
2011-01-06 21:01 3297下载Android安安软件请到:http://code.goo ... -
Firefox CSS 自动高度
2010-07-26 19:43 1550<div style=”overflow:auto;”& ... -
kaptcha生成验证码例子
2009-11-23 00:00 4709下载地址: http://code.google.com/p ... -
(转)sql server 2005/2008设置sql身份验证和sa空密码
2009-11-19 16:20 13306刚刚装了SQL2008,配置了一下,在网上找到这个教程,觉得不 ... -
简单的ChartDirector生成图表例子
2009-11-07 23:03 6384简单的ChartDirector图表生成例子 < ... -
Tomcat无法启动解决办法
2009-08-04 13:45 1423Tomcat按Start Service后,进展到一半时,服务 ... -
[精] java 5.0 中的 同步(Concurrent) [转]
2009-07-26 23:36 11479. 同步(Concurrent) ... -
Apache Bench 性能测试
2009-07-23 17:38 1784Apache Bench ab的全称是Apache Benc ... -
解决Apache安装无服务和the requested operation has failed错误
2009-07-23 16:43 3779写这个为了以后不再到处上网找答案 Apache安装无服务解决 ... -
java简单解析docx、pptx、xlsx文档
2009-07-05 01:46 18699java解析Office文档最有名的开源包当属Apache的P ... -
Log4j在Java WebApp的配置
2009-07-01 21:14 5428通常在开发JAVA项目时会用到Log4J包来记录日志,但在JA ... -
URI抛出URISyntaxException异常处理
2009-06-14 00:04 10195在用new URI(String url)处理url时抛出UR ...
相关推荐
[转自IBM]中文编码问题 JDBC入门 Jdbc事务控制管理 常用数据库连接池 编写JDBC框架 客户信息管理系统 Servlet Filter 过滤器 HTTP 协议 文件上传和下载 Servlet事件监听器 JavaMail开发 (案例)Estore电子商城 软件...
带你步入J2EE殿堂:最易懂的J2EE实例 简析J2EE应用程序数据库类设计模式 编写高级应用程序3 关 于JAVA 的 可 移 植 性 Java 程序编码规范 ...用JAVA转换简繁体的基础知识 邮件例程 - JavaMail - 发送HTML邮件
本书适合有一定Java语言基础的编程人员使用。 主要内容: 使用Enterprise JavaBean(EJB)开发可伸缩的应用程序 使用Java和JAXP分析XML文档 掌握如何使用消息驱动的bean和JMS进行消息传递 使用JMF、Java Sound、JAI和...
本书适合有一定Java语言基础的编程人员使用。 主要内容: 使用Enterprise JavaBean(EJB)开发可伸缩的应用程序 使用Java和JAXP分析XML文档 掌握如何使用消息驱动的bean和JMS进行消息传递 使用JMF、Java Sound、JAI和...
本书适合有一定Java语言基础的编程人员使用。 主要内容: 使用Enterprise JavaBean(EJB)开发可伸缩的应用程序 使用Java和JAXP分析XML文档 掌握如何使用消息驱动的bean和JMS进行消息传递 使用JMF、Java Sound、JAI和...
本书适合有一定Java语言基础的编程人员使用。 主要内容: 使用Enterprise JavaBean(EJB)开发可伸缩的应用程序 使用Java和JAXP分析XML文档 掌握如何使用消息驱动的bean和JMS进行消息传递 使用JMF、Java Sound、JAI和...
本书适合有一定Java语言基础的编程人员使用。 主要内容: 使用Enterprise JavaBean(EJB)开发可伸缩的应用程序 使用Java和JAXP分析XML文档 掌握如何使用消息驱动的bean和JMS进行消息传递 使用JMF、Java Sound、JAI和...
15.3 实例——利用JavaMail收发邮件 221 15.3.1 准备阶段 221 15.3.2 编写发送邮件的实例 223 15.3.3 编写接收邮件的实例 235 15.4 小结 241 第16章 基于良好设计模式的Spring 243 16.1 Spring简介 243...
1 JAVA SE ...3.5 JavaMail(JAVA邮件服务)API详解 3.6 jxl.jar 包简介 3.7 Java与XML联合编程之SAX篇 3.8 Java与XML联合编程之DOM篇 4 其他 4.1 代码复用的规则 4.2 Java IO 包中的Decorator模式
第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...
第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 ...
第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 ...
第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 ...
第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 ...
29.流程委办、转办 2.BPMX3多层架构 系统采用多层的系统架构进行功能开发,有利于代码功能责任分开,同时有利于不同开发人员的分工及合作,也有利于代码的单元测试。系统总体结构如下图所示: 【图二】BPMX3多层...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java...附录A JavaMail发送邮件 附录B 在Spring中开发Web Service
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java...附录A JavaMail发送邮件 附录B 在Spring中开发Web Service
6.1 Web搜索程序基础 159 6.2 遵守Robot协议 160 6.3 Search Crawler概述 161 6.4 SearchCrawler类 162 6.4.1 SearchCrawler类的变量 179 6.4.2 SearchCrawler类的构造函数 179 6.4.3 actionSearch()方法 180 6.4.4 ...
6.1 Web搜索程序基础 159 6.2 遵守Robot协议 160 6.3 Search Crawler概述 161 6.4 SearchCrawler类 162 6.4.1 SearchCrawler类的变量 179 6.4.2 SearchCrawler类的构造函数 179 6.4.3 actionSearch()方法 180 ...