- 浏览: 868179 次
- 性别:
- 来自: 上海
最新评论
-
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 5838句点符号 . 是通配符 , ... -
ubuntu 安装 jdk 1.5
2011-01-06 21:01 3343下载Android安安软件请到:http://code.goo ... -
Firefox CSS 自动高度
2010-07-26 19:43 1600<div style=”overflow:auto;”& ... -
kaptcha生成验证码例子
2009-11-23 00:00 4768下载地址: http://code.google.com/p ... -
(转)sql server 2005/2008设置sql身份验证和sa空密码
2009-11-19 16:20 13367刚刚装了SQL2008,配置了一下,在网上找到这个教程,觉得不 ... -
简单的ChartDirector生成图表例子
2009-11-07 23:03 6453简单的ChartDirector图表生成例子 < ... -
Tomcat无法启动解决办法
2009-08-04 13:45 1470Tomcat按Start Service后,进展到一半时,服务 ... -
[精] java 5.0 中的 同步(Concurrent) [转]
2009-07-26 23:36 11929. 同步(Concurrent) ... -
Apache Bench 性能测试
2009-07-23 17:38 1817Apache Bench ab的全称是Apache Benc ... -
解决Apache安装无服务和the requested operation has failed错误
2009-07-23 16:43 3846写这个为了以后不再到处上网找答案 Apache安装无服务解决 ... -
java简单解析docx、pptx、xlsx文档
2009-07-05 01:46 18809java解析Office文档最有名的开源包当属Apache的P ... -
Log4j在Java WebApp的配置
2009-07-01 21:14 5486通常在开发JAVA项目时会用到Log4J包来记录日志,但在JA ... -
URI抛出URISyntaxException异常处理
2009-06-14 00:04 10354在用new URI(String url)处理url时抛出UR ...
相关推荐
JavaMail 是一个开源库,用于在Java应用程序中发送和接收电子邮件。...`MailTest`文件为实践提供了基础,帮助我们理解和调试JavaMail的邮件发送过程。记得根据实际情况调整配置,以匹配你的邮件服务器设置。
James不仅是一个邮件服务器,更是一个邮件应用平台,通过Mailet(类似于Servlet)机制可以轻松扩展其功能,例如实现Mail2SMS(邮件转短信)、Mail2Fax(邮件转传真)等功能。 James具有非常灵活的配置选项,特别是...
综上所述,JavaMail API和JAF是开发Java邮件应用的基础,它们提供了强大的邮件处理能力,但同时也需要开发者理解邮件协议和MIME规范。通过正确集成和使用这两个库,开发者可以轻松地构建发送、接收和处理电子邮件的...
2. 创建一个`Session`对象,这是JavaMail的基础,用于设置邮件服务器的相关参数,如SMTP服务器地址、端口、用户名、密码等。 3. 创建`Message`对象,设置邮件的基本信息,如发件人、收件人、主题和内容。 4. 使用`...
2. **Session**: 是 JavaMail 的全局配置对象,用于设置认证信息、服务器地址等参数,是整个邮件操作的基础。 3. **Store** 和 **Folder**: `Store` 对象代表与邮件服务器的连接,可以用来获取 `Folder` 对象,`...
2. **Session 类**:代表邮件会话,是JavaMail操作的基础。你可以配置SMTP服务器信息、认证信息以及其他邮件传输参数。 3. **Transport 类**:负责将准备好的Message对象实际发送出去,通过SMTP协议连接到邮件...
这个合包提供了关于如何使用Java操作PDF以及如何利用JavaMail发送邮件的基础教程。下面将详细讲解这两个知识点。 首先,我们来看Java操作PDF的部分。PDF(Portable Document Format)是一种广泛使用的文档格式,...
在Java Web开发中,经常会...以上这些库和工具是Java Web开发中的基础组件,它们各自解决了一个特定的问题,并且通常一起使用以构建功能完善的Web应用。了解和熟练掌握这些技术,对于提升Java Web开发能力至关重要。
Javamail是处理电子邮件的API,而JNDI(Java Naming and Directory Interface)用于查找和管理分布式系统的资源。JSP和Servlet是用于构建动态网页的技术,JDBC(Java Database Connectivity)是连接Java应用程序和...
邮件发送和接收可以使用 JavaMail API 实现,例如,使用 SMTP 协议发送邮件,使用 POP3 协议接收邮件。 JavaWeb 学习总结涵盖了 JavaWeb 的基础知识,包括 XML 基础、XML 解析、Java 基础增强、HTTP 协议、JSP 技术...
在本学习笔记中,博主孙风涛详细记录了张孝祥讲师主讲的《Java邮件开发》课程,涵盖了电子邮件基础知识、邮件协议、JavaMail API的使用、邮件内容的组织、编码及发送过程,以及在Web应用中集成邮件功能的实践。...
2. **Session 创建**:基于配置的Properties,创建一个 `Session` 实例,这是与邮件服务器交互的基础。 3. **Message 创建**:使用 `Message` 类创建邮件对象,可以设置主题、正文、发送者和接收者。 4. **...
【标题】"JAVA写的简历发送器"涉及到的关键技术点包括JAVA编程、Swing图形界面设计以及JavaMail API的...同时,对于更高级的开发者,也可以在此基础上扩展功能,比如支持更多邮箱服务商,增加错误处理和日志记录等。
- **J2EE (Java 2 Enterprise Edition)**:聚焦于企业级分布式应用开发,支持如EJB、JSP/Servlet、JMS、JNDI、JTA、JavaMail等技术,适用于复杂的企业级应用。 - **J2ME (Java 2 Micro Edition)**:针对移动设备和...
[转自IBM]中文编码问题 JDBC入门 Jdbc事务控制管理 常用数据库连接池 编写JDBC框架 客户信息管理系统 Servlet Filter 过滤器 HTTP 协议 文件上传和下载 Servlet事件监听器 JavaMail开发 (案例)Estore电子商城 软件...
**J2EE 1.4基础教程** Java 2 Platform, Enterprise Edition (J2EE) 是Oracle公司(原Sun Microsystems)推出的企业级应用开发平台,主要用于构建分布式、多层架构的Web应用程序。J2EE 1.4是该平台的一个重要版本,...
6. **邮件发送服务**:通过JavaMail API实现邮件发送功能,让用户能够通过JSP页面发送电子邮件。 这套课件旨在通过理论讲解与实践案例相结合的方式,帮助学习者快速掌握JSP技术,并具备实际开发能力。通过深入学习...
Java EE提供了丰富的组件和服务,如Web层组件(包括JSP和Servlet)、业务层组件(如EJB)以及JNDI、JDBC、RMI、JAAS、JavaMail等服务。此外,Java EE还包括了标准体系和流行框架体系,如Struts、Hibernate和Spring,...
6. **邮件发送**:使用JavaMail API发送电子邮件。 7. **异常处理**:自定义错误页面,优雅地处理程序中的异常。 8. **国际化与本地化**:提供多语言支持,根据用户设置显示不同语言的页面。 9. **AJAX技术**:使用...
例如,`javax.mail.Session`代表邮件会话,是所有邮件操作的基础;`javax.mail.Transport`用于发送邮件;`javax.mail.Folder`和`javax.mail.Message`则分别用于管理邮件文件夹和邮件本身。 5. **javamain-14.2.jar*...