javaMail操作Word格式.docx
《javaMail操作Word格式.docx》由会员分享,可在线阅读,更多相关《javaMail操作Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
而这个功能是微软的Outlook内建的,那么就说明微软Outlook之类的邮件客户端软件是通过查询最近收到的邮件来计算新邮件的数量来实现前面所说的功能。
因此在我们使用JavaMailAPI时需要注意,当需要获得如前面所讲的新邮件数量之类的信息时,我们不得不自己进行计算。
IMAP
IMAP,即InternetMessageAccessProtocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等。
IMAP与POP类似,都是一种邮件获取协议。
POP和IMAP有什么区别?
POP允许电子邮件客户端下载服务器上的邮件,但是您在电子邮件客户端的操作(如:
移动邮件、标记已读等),这是不会反馈到服务器上的,比如:
您通过电子邮件客户端收取了QQ邮箱中的3封邮件并移动到了其他文件夹,这些移动动作是不会反馈到服务器上的,也就是说,QQ邮箱服务器上的这些邮件是没有同时被移动的。
但是IMAP就不同了,电子邮件客户端的操作都会反馈到服务器上,您对邮件进行的操作(如:
移动邮件、标记已读等),服务器上的邮件也会做相应的动作。
也就是说,IMAP是“双向”的。
同时,IMAP可以只下载邮件的主题,只有当您真正需要的时候,才会下载邮件的所有内容。
附:
源代码
/**
*Createdon2013Feb4,201311:
25:
49AM
*/
packagezq.email;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
import.MalformedURLException;
import.URL;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Properties;
importjavax.mail.BodyPart;
importjavax.mail.Flags;
importjavax.mail.Folder;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.Multipart;
importjavax.mail.Session;
importjavax.mail.Store;
importjavax.mail.Transport;
importjavax.mail.internet.AddressException;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
importjavax.mail.internet.MimeUtility;
importjavax.mail.search.OrTerm;
importjavax.mail.search.SearchTerm;
importjavax.mail.search.SubjectTerm;
importmons.mail.DefaultAuthenticator;
importmons.mail.Email;
importmons.mail.EmailAttachment;
importmons.mail.EmailException;
importmons.mail.MultiPartEmail;
importmons.mail.SimpleEmail;
importmon.util.LoggerUtils;
importmon.email.EmailUtils;
importmon.json.JSONUtils;
importmon.properties.PropertiesUtils;
*Title:
邮件工具类
*<
/p>
*Description:
*调用方法:
*实例化EmailUtilemailUtil=newEmailUtil();
*发送简单邮件emailUtil.sendSimpleEmail("
zq@"
"
发送简单邮件"
"
发送简单邮件测试"
);
*Copyright:
Copyright(c)2012
p>
*Company:
通易科技有限公司
*2013Feb4,201311:
49AM
*
*@authorzq
*@version1.0
publicclassEmailUtil{
/**
*属性配置文件名称
*/
privatestaticfinalStringEMAIL_CONFIGURATION_FILE="
email.properties"
;
*服务器名称配置key
privatestaticfinalStringEMAIL_HOST_KEY="
email.host"
privatestaticStringemailHost;
privatestaticfinalStringEMAIL_POP3_KEY="
email.pop3"
privatestaticStringemailPop3;
privatestaticfinalStringEMAIL_IMAP_KEY="
email.imap"
privatestaticStringemailImap;
*用户名配置key
privatestaticfinalStringEMAIL_USERNAME_KEY="
email.username"
privatestaticStringemailUsername;
*密码配置key
privatestaticfinalStringEMAIL_PASSWORD_KEY="
email.password"
privatestaticStringemailPassowrd;
*配置charset
privatestaticfinalStringEMAIL_CHARSET_KEY="
email.charset"
privatestaticStringemailCharset;
*发件人配置key
privatestaticfinalStringEMAIL_FROM_KEY="
email.from"
privatestaticStringemailFrom="
*是否删除邮件
privatestaticbooleanIS_DELETE=false;
//简单邮件
privateEmailemail;
//带附件的邮件
privateMultiPartEmailmpEmail;
privateStringbakMail;
//备份文件夹路径
privatestaticfinalStringEMAIL_FILE_BAK="
c:
\\TEMP\\"
//html邮件htmlemail
publicEmailUtil()throwsException{
super();
init();
}
*工具类实例化,配置的邮件信息
*
*@authorFeb4,201311:
34:
02AMZQ
*@throwsException
privatevoidinit()throwsException{
emailHost=PropertiesUtils.getParameter(EMAIL_CONFIGURATION_FILE,
EMAIL_HOST_KEY);
emailPop3=PropertiesUtils.getParameter(EMAIL_CONFIGURATION_FILE,
EMAIL_POP3_KEY);
emailImap=PropertiesUtils.getParameter(EMAIL_CONFIGURATION_FILE,
EMAIL_IMAP_KEY);
emailFrom=PropertiesUtils.getParameter(EMAIL_CONFIGURATION_FILE,
EMAIL_FROM_KEY);
emailCharset=PropertiesUtils.getParameter(EMAIL_CONFIGURATION_FILE,
EMAIL_CHARSET_KEY);
emailUsername=PropertiesUtils.getParameter(EMAIL_CONFIGURATION_FILE,
EMAIL_USERNAME_KEY);
emailPassowrd=PropertiesUtils.getParameter(EMAIL_CONFIGURATION_FILE,
EMAIL_PASSWORD_KEY);
*发送单个邮件
*@authorFeb4,20132:
12:
10PMZQ
*@paramto
*接收人
*@paramsubject
*邮件标题
*@parammsg
*邮件信息
*@throwsEmailException
*@throwsAddressException
publicvoidsendSimpleEmail(Stringto,Stringsubject,Stringmsg)
throwsEmailException,AddressException{
createSimpleEmail(null,null);
email.setSubject(subject);
email.setMsg(msg);
email.addTo(to);
email.send();
*发送邮件带附件
*@authorFeb4,20134:
13:
18PMZQ
*@paramattachments
*附件集合附件集合List<
Url>
为网络文件;
List<
File>
为本地文件
*@throwsMalformedURLException
*@throwsEmailException
publicvoidsendEmailAttachment(Stringto,Stringsubject,Stringmsg,
List<
Object>
attachments)throwsMalformedURLException,
EmailException{
createEmailAttachment(null,null,attachments);
mpEmail.setSubject(subject);
mpEmail.setMsg(msg);
mpEmail.addTo(to);
mpEmail.send();
*通过pop3协议读取邮件
*@authorFeb4,20135:
48:
15PMZQ
*@throwsMalformedURLException
*@throwsMessagingException
publicvoidgetPop3Email()throwsMalformedURLException,EmailException,
MessagingException{
Folderfolder=null;
Storestore=null;
try{
//设置javamail属性
Propertiesprops=System.getProperties();
//Setupmailserver
props.put("
mail.smtp.host"
emailHost);
//设置SMTP发件服务器地址
mail.smtp.auth"
true"
//邮件服务器是否要验证
//Getsession
Sessionsession=Session.getDefaultInstance(props);
//获取邮件会话
session.setDebug(false);
//Definemessage
store=session.getStore("
pop3"
store.connect(emailPop3,emailUsername,emailPassowrd);
folder=store.getFolder("
INBOX"
folder.open(Folder.READ_WRITE);
//Message[]messages=folder.getMessages();
Message[]messages=searchMessage(folder);
getAttachment(session,messages);
}catch(Exceptione){
LoggerUtils.error(EmailUtils.class,"
取邮件出错:
"
e);
}finally{
if(folder!
=null){
folder.close(true);
}
if(store!
store.close();
}
*只取指定格式标题的邮件
*通过邮件标题查找邮件
*@authorFeb4,20136:
31:
45PMZQ
*@paramfolder
*@return
privateMessage[]searchMessage(Folderfolder)throwsMessagingException{
//邮件以"
CC#"
开关
SubjectTermsbujectTerm=newSubjectTerm("
SearchTermst=newOrTerm(sbujectTerm,sbujectTerm);
returnfolder.search(st);
*解析附件
05:
*@paramsession
*@parammessages
*@throwsIOException
privatevoidgetAttachment(Sessionsession,Message[]messages)
throwsMessagingException,IOException,Exception{
Objectcontent=null;
Stringsubject=null;
for(Messagemessage:
messages){
//解析邮件内容
//标题
subject=message.getSubject();
LoggerUtils.developer(EmailUtils.class,"
读取邮件:
+subject);
//转发邮箱
forwardMail(session,message);
//集装箱报送
content=message.getContent();
if(contentinstanceofMimeMultipart){
//有附件
MimeMultipartmultipart=(MimeMultipart)content;
parseMultipart(message,multipart);
//删除邮件
message.setFlag(Flags.Flag.DELETED,IS_DELETE);
*对复杂邮件的解析,读取附件这里是excel
56:
36PMZQ
*@parammessage
*@parammultipart
*邮件消息体
*@throwsException
privatevoidparseMultipart(Messagemessage,Multipartmultipart)
throwsException{
intcount=multipart.getCount();
//System.out.println("
couont="
+count);
for(intidx=0;
idx<
count;
idx++){
BodyPartbodyPart=multipart.getBodyPart(idx);
//System.out.println(bodyPart.getContentType());
LoggerUtils.developer(EmailUtils.class,JSONUtils
.object2JSON(bodyPart));
if(bodyPart.isMimeType("
text/plain"
)){
//System.out.println("
plain................."
//+bodyPart.getContent());
}elseif(bodyPart.isMimeType("
text/html"
html..................."
multipart/*"
Multipartmpart=(Multipart)bodyPart.getContent();
parseMultipart(message,mpart);
application/vnd.ms-excel"
)
||bodyPart.isMimeType("
application/octet-stream"
//application/vnd.openxmlforma