- 浏览: 233096 次
- 性别:
最新评论
-
nechiy:
maidongdong 写道请教一下:1.不能全是数学和特殊字 ...
正则表达式(必须包含字母.数字和特殊字符) -
nechiy:
bruce,你的解决方法让我眼前一亮,最起码思维方式值得眼前一 ...
正则表达式(必须包含字母.数字和特殊字符) -
zgcy123456:
...
Calendar获取时间的月和日 -
zgcy123456:
谢谢了,lz,:idea:
Calendar获取时间的月和日 -
yan0133:
这个显然不对了,老兄你有没有试验过,随便写个纯字母的就通过了
正则表达式(必须包含字母.数字和特殊字符)
处理HTML消息
发送基于HTML的消息比发送纯文本消息要稍微复杂一点,尽管它不需要做大量的工作。它全部取决于您特定的需求。
发送HTML消息
如果您所要做的全部工作是发送一个等价的HTML文件作为消息,并让邮件阅读者忧心于取出任何嵌入的图片或相关片段,那么就可以使用消息的setContent()方法,以字符串形式传递消息内容,并把内容类型设置为text/html。
- String htmlText = "
Hello
" + - "<img src=\"http://www.jguru.com/images/logo.gif\">";
- message.setContent(htmlText, "text/html"));
在接收端,如果您用JavaMail API获取消息,在该API中没有内置任何用于以HTML格式显示消息的功能。JavaMail API只以字节流的形式来查看消息。要以HTML格式显示消息,您必须使用Swing JeditorPane或某些第3方HTML阅读器组件。
- if (message.getContentType().equals("text/html")) {
- String content = (String)message.getContent();
- JFrame frame = new JFrame();
- JEditorPane text = new JEditorPane("text/html", content);
- text.setEditable(false);
- JScrollPane pane = new JScrollPane(text);
- frame.getContentPane().add(pane);
- frame.setSize(300, 300);
- frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- frame.show();
- }
在消息中包含图片
另一方面,如果您的HTML消息中嵌入了作为消息一部分的图片,并且您想保持消息内容的完整,就必须把图片看作附件,并用特殊的通信标识符URL引用该图片,该通信标识符引用的是图片附件的内容ID报文。
嵌入图片的处理与附加一个文件到消息上非常相似,惟一的不同之处在于:您必须区分MimeMultipart中,哪些部分是在构造器(或通过setSubType()方法)通过设置其子类型而使之相关的,以及将图片的内容ID报头设置成任意字符串,它将在img标记中用作图片的源路径。下面显示了一个完整的示例:
- String file = ...;
- // Create the message
- Message message = new MimeMessage(session);
- // Fill its headers
- message.setSubject("Embedded Image");
- message.setFrom(new InternetAddress(from));
- message.addRecipient(Message.RecipientType.TO,
- new InternetAddress(to));
- // Create your new message part
- BodyPart messageBodyPart = new MimeBodyPart();
- String htmlText = "<H1>Hello</H1>" +
- "<img src=\"cid:memememe\">";
- messageBodyPart.setContent(htmlText, "text/html");
- // Create a related multi-part to combine the parts
- MimeMultipart multipart = new MimeMultipart("related");
- multipart.addBodyPart(messageBodyPart);
- // Create part for the image
- messageBodyPart = new MimeBodyPart();
- // Fetch the image and associate to part
- DataSource fds = new FileDataSource(file);
- messageBodyPart.setDataHandler(new DataHandler(fds));
- messageBodyPart.setHeader("Content-ID","memememe");
- // Add part to multi-part
- multipart.addBodyPart(messageBodyPart);
- // Associate multi-part with message
- message.setContent(multipart);
练习
发送带有图片的 HTML 消息
用SearchTerm搜索
JavaMail API包含一种可用于创建SearchTerm(搜索条件)的筛选机制,它可以在javax.mail.search包中找到。一旦创建了SearchTerm,您就可以询问某个文件夹匹配的消息,并检索出消息对象数组:
- SearchTerm st = ...;
- Message[] msgs = folder.search(st);
有22种不同的类可用于帮助创建搜索条件。
· AND条件(AndTerm类)
· OR条件(OrTerm类)
· NOT条件(NotTerm类)
· SENT DATE条件(SentDateTerm类)
· CONTENT条件(BodyTerm类)
· HEADER条件(FromTerm / FromStringTerm, RecipientTerm / RecipientStringTerm, SubjectTerm, etc.)
本质上,您可以为匹配的消息创建一个逻辑表达式,然后进行搜索。例如,下面显示了一条消息的条件搜索示例,该消息带有(部分带有)一个ADV主题字符串,其发送者字段为friend@public.com。您可能考虑定期运行该查询,并自动删除任何返回的消息。
- SearchTerm st =
- new OrTerm(
- new SubjectTerm("ADV:"),
- new FromStringTerm("friend@public.com"));
- Message[] msgs = folder.search(st);
一个支持多附件的mail发送类
package mail;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.activation.*;
import java.io.*;
/**
*
Title:
*
Description:
*
Copyright: Copyright (c) 2004
*
Company:
* @author 黄新
* @version 1.0
*/
public class Mail {
public Mail() {
}
/**
* 发送邮件
* @param to 收件人
* @param subject 主题
* @param body 主体 邮件内容
* @param from 法件人
* @param PassWord 密码
* @param str_files 附件 数组
* @return 是否发送成功 只能以是否跑出异常来做判断 寻求更好的判断方法
*/
public boolean sendMail(String to,String subject,String body, String from,String PassWord,String []str_files){
Properties props = new Properties();
boolean isSended = true;
try {
String protocol = "smtp";//smtp pop3
String host = getHost(from,protocol);
String username = getUsername(from);
//Setup mail server
props.put("mail."+protocol+".host",host);//smtp pop3
//Get Session
props.put("mail."+protocol+".auth","true");
PopupAuthenticator popAuthenticator = new PopupAuthenticator();
PasswordAuthentication pop = popAuthenticator.performCheck(username,PassWord);
Session session = Session.getInstance(props,popAuthenticator);
//Define message
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setSentDate(new java.util.Date ()) ;
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject(subject);
//给消息对象设置内容
BodyPart textBodyPart=new MimeBodyPart();
textBodyPart.setContent(body,"text/html;charset=gb2312") ;
Multipart mm=new MimeMultipart();
mm.addBodyPart(textBodyPart);
int i = str_files.length ;
mm.addBodyPart(getFileBodyPart(str_files[i-1])) ;
i--;
}
message.setContent(mm) ;
message.saveChanges() ;
Transport.send(message);
}
catch(AuthenticationFailedException afe){
isSended = false;
System.out.println("登陆验证出现错误 ,请检查你的用户名和密码") ;
afe.printStackTrace() ;
}
catch(MessagingException me){
isSended = false;
me.printStackTrace() ;
System.out.print("") ;
}
catch(Exception e){
isSended = false;
e.printStackTrace() ;
}
return isSended;
}
/**
* 获得通过邮件地址获取用户名
* @param email 邮件地址
* @return 用户名
*/
private String getUsername(String email){
StringBuffer str = new StringBuffer(email);
String usename = str.substring(0,str.indexOf("@") ) ;
return usename;
}
/**
* 通过邮件地址获取邮件服务器地址
* @param email 邮件地址
* @param protocol 邮件协议
* @return 邮件服务器主机地址
*/
private String getHost(String email,String protocol){
StringBuffer str = new StringBuffer(email);
String host = protocol+"." + str.substring(str.indexOf("@")+1 ) ;
return host;
}
private BodyPart getFileBodyPart(String str_file){
BodyPart fileBodyPart = new MimeBodyPart();
// int NO_files = str_files.length ;
try {
File file = new File(str_file);
FileDataSource fds=new FileDataSource(file);//用本地文件
DataHandler dh = new DataHandler(fds);
fileBodyPart.setFileName(file.getName());//可以和原文件名不一致
fileBodyPart.setDataHandler(dh);
}
catch (MessagingException ME) {
ME.printStackTrace() ;
System.out.println("获取文件名setFileName或设置setDataHandler时出现错误") ;
return null;
}
return fileBodyPart;
}
public static void main(String[] args) {
String[] str_files ={"G:\\192.168.7.144备份\\学习资料\\技术文章\\eclipse 参考手册\\CSDN_eclipse 参考手册(三).htm ","G:\\日立.html"};
Mail m = new Mail();
System.out.println(m.sendMail("xini_huang@hotmail.com","nihao","helloworld!!!!","huangxinyi2003@163.com","差点把自己的密码给泄漏了",str_files)) ;
//System.out.println(m.getUsername("huangxinyi2003@163.com")+"======"+m.getHost("huangxinyi2003@163.com") ) ;
}
}
[ Last edited by 黄新 on 2004-12-2 at 16:31 ]
2004-12-2 16:26
黄新
积分 293
发贴 263
注册 2003-6-22
来自 福建漳州
状态 离线 验证
package mail;
import javax.mail.*;
import javax.mail.internet.*;
/**
*
Title:
*
Description:
*
Copyright: Copyright (c) 2004
*
Company:
* @author 黄新
* @version 1.0
*/
public class PopupAuthenticator extends Authenticator{
String username=null;
String password=null;
public PopupAuthenticator(){
}
public PasswordAuthentication performCheck(String user,String pass){
username = user;
password = pass;
return getPasswordAuthentication();
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
public static void main(String[] args) {
}
}
发表评论
-
数字金额转大写
2011-03-13 02:57 1751public class ConverChMoney ... -
读取资源文件
2008-07-16 16:14 1184package mainTest; import jav ... -
java正则表达式应用举例
2008-01-17 10:06 1843/** * @author 作者 Bruce * @v ... -
Cookie 操作
2007-09-17 10:37 2928Cookie是当你浏 ... -
Eclipse中设置在创建新类时自动生成注释
2007-08-23 14:15 1536windows-->preference Java--& ... -
关于serialVersionUID
2007-08-02 17:26 1547Eclipse到3.1及以后的版本,在类中要加上:privat ... -
Document对象详解 (JS)
2007-07-02 11:12 2068Document对象详解 document ... -
(转)JUnit实战篇 (二) 续
2007-06-12 16:43 1390JUnit最佳实践 <o:p></o:p&g ... -
(转)JUnit实战篇 (二)
2007-06-12 16:35 1531... -
(转)JUnit实战篇 (一)
2007-06-12 16:25 1245出处:http://blog.csdn.net/k ... -
Srping读书笔记
2007-06-12 13:26 1543术语: IoC(Inversion of Co ... -
javaScript:Escape()
2007-06-07 17:09 1988escape 返回以 ISO-Latin-1 字符集书写的参数 ... -
tbody的解释及用法
2007-06-06 14:21 1855写html代码的时候,遇到了Tbody这个 ... -
Java语言的Calendar和Date类
2007-06-05 11:38 2117Java 语言的Calendar(日 ... -
Calendar获取时间的月和日
2007-06-05 11:14 18433开始使用new Date()测试,并用通过da ... -
JAVA中获得本地系统时间的方法
2007-06-05 10:59 7058import java.util.*; ... -
JAVA Calendar详解
2007-06-05 10:54 19313(在文章的最后,将会介绍Date类,如果有兴趣,可以直接翻到最 ... -
java中的时间操作
2007-06-05 10:41 3067java中的时间操作不外乎这四种情况: 1、获取当前时间 2、 ... -
文件的压缩和解压
2007-06-01 15:06 1342java 代码 //文件名:myZip.jav ... -
JAVA中用接口实现多继承和多态的方法
2007-06-01 15:01 18361.JAVA里没有多继承,一个类之能有一个父类。而继承的表现就 ...
相关推荐
JavaMail API详解.txt JavaMail API详解.txt JavaMail API详解.txt JavaMail API详解.txt
JavaMail API详解
一、JavaMail API简介 JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。而不是像sendmail或者其它的...
JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。而不是像sendmail或者其它的邮件传输代理(Mail ...
包含JavaMail1.4.5、JAF1.1.1、JavaMail API文档英文版,以及JavaMailAPI中文详解
javamail源码详解,帮助文档,开发手册
JavaMail(JAVA邮件服务器)API详解 chm,内容涉及JavaMail API简介、相关协议一览、安装JavaMail、认识和使用JavaMail API等相关内容。
JavaMail_API详解
JavaMail(JAVA邮件服务) API详解
这份资料详解JavaMail APIJavaMail API,希望能给有志成为IT人才一点帮助! Thank you for your use!
主要介绍了详解Java编程中JavaMail API的使用,通过JavaMail可以实现丰富的邮件类相关功能,需要的朋友可以参考下
JavaMail(JAVA邮件服务) API详解,并且是中文版的
内含JavaMail1.4.5官方包、JAF1.1.1官方包和JavaMailAPI详解文档。 !!!若文档有无法打开的情况,请将文档拷贝到C盘根目录再打开。
我们可以基于JavaMail,开发出类似于Microsoft Outlook的应用程序。 SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,...
Java网络编程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、JavaMail API、MVC设计模式、安全网络通信、CORBA和Web服务