下面是一个邮件接收的工具类,有点长!!!
public class ReciveMail {
private MimeMessage msg = null;
private String saveAttchPath = "";
private StringBuffer bodytext = new StringBuffer();
private String dateformate = "yy-MM-dd HH:mm";
public ReciveMail(MimeMessage msg){
this.msg = msg;
}
public void setMsg(MimeMessage msg) {
this.msg = msg;
}
/**
* 获取发送邮件者信息
* @return
* @throws MessagingException
*/
public String getFrom() throws MessagingException{
InternetAddress[] address = (InternetAddress[]) msg.getFrom();
String from = address[0].getAddress();
if(from == null){
from = "";
}
String personal = address[0].getPersonal();
if(personal == null){
personal = "";
}
String fromaddr = personal +"<"+from+">";
return fromaddr;
}
/**
* 获取邮件收件人,抄送,密送的地址和信息。根据所传递的参数不同 "to"-->收件人,"cc"-->抄送人地址,"bcc"-->密送地址
* @param type
* @return
* @throws MessagingException
* @throws UnsupportedEncodingException
*/
public String getMailAddress(String type) throws MessagingException, UnsupportedEncodingException{
String mailaddr = "";
String addrType = type.toUpperCase();
InternetAddress[] address = null;
if(addrType.equals("TO")||addrType.equals("CC")||addrType.equals("BCC")){
if(addrType.equals("TO")){
address = (InternetAddress[]) msg.getRecipients(Message.RecipientType.TO);
}
if(addrType.equals("CC")){
address = (InternetAddress[]) msg.getRecipients(Message.RecipientType.CC);
}
if(addrType.equals("BCC")){
address = (InternetAddress[]) msg.getRecipients(Message.RecipientType.BCC);
}
if(address != null){
for(int i=0;i<address.length;i++){
String mail = address[i].getAddress();
if(mail == null){
mail = "";
}else{
mail = MimeUtility.decodeText(mail);
}
String personal = address[i].getPersonal();
if(personal == null){
personal = "";
}else{
personal = MimeUtility.decodeText(personal);
}
String compositeto = personal +"<"+mail+">";
mailaddr += ","+compositeto;
}
mailaddr = mailaddr.substring(1);
}
}else{
throw new RuntimeException("Error email Type!");
}
return mailaddr;
}
/**
* 获取邮件主题
* @return
* @throws UnsupportedEncodingException
* @throws MessagingException
*/
public String getSubject() throws UnsupportedEncodingException, MessagingException{
String subject = "";
subject = MimeUtility.decodeText(msg.getSubject());
if(subject == null){
subject = "";
}
return subject;
}
/**
* 获取邮件发送日期
* @return
* @throws MessagingException
*/
public String getSendDate() throws MessagingException{
Date sendDate = msg.getSentDate();
SimpleDateFormat smd = new SimpleDateFormat(dateformate);
return smd.format(sendDate);
}
/**
* 获取邮件正文内容
* @return
*/
public String getBodyText(){
return bodytext.toString();
}
/**
* 解析邮件,将得到的邮件内容保存到一个stringBuffer对象中,
* 解析邮件 主要根据MimeType的不同执行不同的操作,一步一步的解析
* @param part
* @throws MessagingException
* @throws IOException
*/
public void getMailContent(Part part) throws MessagingException, IOException{
String contentType = part.getContentType();
int nameindex = contentType.indexOf("name");
boolean conname = false;
if(nameindex != -1){
conname = true;
}
System.out.println("CONTENTTYPE:"+contentType);
if(part.isMimeType("text/plain")&&!conname){
bodytext.append((String)part.getContent());
}else if(part.isMimeType("text/html")&&!conname){
bodytext.append((String)part.getContent());
}else if(part.isMimeType("multipart/*")){
Multipart multipart = (Multipart) part.getContent();
int count = multipart.getCount();
for(int i=0;i<count;i++){
getMailContent(multipart.getBodyPart(i));
}
}else if(part.isMimeType("message/rfc822")){
getMailContent((Part) part.getContent());
}
}
/**
* 判断邮件是否需要回执,如需回执返回true,否则返回false
* @return
* @throws MessagingException
*/
public boolean getReplySign() throws MessagingException{
boolean replySign = false;
String needreply[] = msg.getHeader("Disposition-Notification-TO");
if(needreply != null){
replySign = true;
}
return replySign;
}
/**
* 获取此邮件的message-id
* @return
* @throws MessagingException
*/
public String getMessageId() throws MessagingException{
return msg.getMessageID();
}
/**
* 判断此邮件是否已读,如果未读则返回false,已读返回true
* @return
* @throws MessagingException
*/
public boolean isNew() throws MessagingException{
boolean isnew = false;
Flags flags = ((Message)msg).getFlags();
Flags.Flag[] flag = flags.getSystemFlags();
System.out.println("flags's length:"+flag.length);
for(int i=0;i<flag.length;i++){
if(flag[i]==Flags.Flag.SEEN){
isnew = true;
System.out.println("seen message .......");
break;
}
}
return isnew;
}
/**
* 判断是是否包含附件
* @param part
* @return
* @throws MessagingException
* @throws IOException
*/
public boolean isContainAttch(Part part) throws MessagingException, IOException{
boolean flag = false;
//String contentType = part.getContentType();
if(part.isMimeType("multipart/*")){
Multipart multipart = (Multipart) part.getContent();
int count = multipart.getCount();
for(int i=0;i<count;i++){
BodyPart bodypart = multipart.getBodyPart(i);
String dispostion = bodypart.getDisposition();
if((dispostion != null)&&(dispostion.equals(Part.ATTACHMENT)||dispostion.equals(Part.INLINE))){
flag = true;
}else if(bodypart.isMimeType("multipart/*")){
flag = isContainAttch(bodypart);
}else{
String conType = bodypart.getContentType();
if(conType.toLowerCase().indexOf("appliaction")!=-1){
flag = true;
}
if(conType.toLowerCase().indexOf("name")!=-1){
flag = true;
}
}
}
}else if(part.isMimeType("message/rfc822")){
flag = isContainAttch((Part) part.getContent());
}
return flag;
}
/**
* 保存附件
* @param part
* @throws MessagingException
* @throws IOException
*/
public void saveAttchMent(Part part) throws MessagingException, IOException{
String filename = "";
if(part.isMimeType("multipart/*")){
Multipart mp = (Multipart) part.getContent();
for(int i=0;i<mp.getCount();i++){
BodyPart mpart = mp.getBodyPart(i);
String dispostion = mpart.getDisposition();
if((dispostion != null)&&(dispostion.equals(Part.ATTACHMENT)||dispostion.equals(Part.INLINE))){
filename = mpart.getFileName();
if(filename.toLowerCase().indexOf("gb2312")!=-1){
filename = MimeUtility.decodeText(filename);
}
saveFile(filename,mpart.getInputStream());
}else if(mpart.isMimeType("multipart/*")){
saveAttchMent(mpart);
}else{
filename = mpart.getFileName();
if(filename != null&&(filename.toLowerCase().indexOf("gb2312")!=-1)){
filename = MimeUtility.decodeText(filename);
}
saveFile(filename,mpart.getInputStream());
}
}
}else if(part.isMimeType("message/rfc822")){
saveAttchMent((Part) part.getContent());
}
}
/**
* 获得保存附件的地址
* @return
*/
public String getSaveAttchPath() {
return saveAttchPath;
}
/**
* 设置保存附件地址
* @param saveAttchPath
*/
public void setSaveAttchPath(String saveAttchPath) {
this.saveAttchPath = saveAttchPath;
}
/**
* 设置日期格式
* @param dateformate
*/
public void setDateformate(String dateformate) {
this.dateformate = dateformate;
}
/**
* 保存文件内容
* @param filename
* @param inputStream
* @throws IOException
*/
private void saveFile(String filename, InputStream inputStream) throws IOException {
String osname = System.getProperty("os.name");
String storedir = getSaveAttchPath();
String sepatror = "";
if(osname == null){
osname = "";
}
if(osname.toLowerCase().indexOf("win")!=-1){
sepatror = "//";
if(storedir==null||"".equals(storedir)){
storedir = "d://temp";
}
}else{
sepatror = "/";
storedir = "/temp";
}
File storefile = new File(storedir+sepatror+filename);
System.out.println("storefile's path:"+storefile.toString());
BufferedOutputStream bos = null;
BufferedInputStream bis = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(storefile));
bis = new BufferedInputStream(inputStream);
int c;
while((c= bis.read())!=-1){
bos.write(c);
bos.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
bos.close();
bis.close();
}
}
public void recive(Part part,int i) throws MessagingException, IOException{
System.out.println("------------------START-----------------------");
System.out.println("Message"+i+" subject:" + getSubject());
System.out.println("Message"+i+" from:" + getFrom());
System.out.println("Message"+i+" isNew:" + isNew());
boolean flag = isContainAttch(part);
System.out.println("Message"+i+" isContainAttch:" +flag);
System.out.println("Message"+i+" replySign:" + getReplySign());
getMailContent(part);
System.out.println("Message"+i+" content:" + getBodyText());
setSaveAttchPath("c://temp//"+i);
if(flag){
saveAttchMent(part);
}
System.out.println("------------------END-----------------------");
}
}
邮件接收与工具类的使用,有好几种邮件接收的写法!:
看了很多网上其他代码,pop3Server的值是pop.mail.163.com,但是试了试不成功,还有user的值既可以是带有username@...com也可以是username。
如果收件邮箱是163邮箱,必须先登陆163邮箱中设置,开启pop3服务。至于别的邮箱暂不知道。
public static void main(String[] args) throws Exception {
// 连接pop3服务器的主机名、协议、用户名、密码
String pop3Server = "pop.163.com";
String protocol = "pop3";
String user = "username";
String pwd = "password";
// 创建一个有具体连接信息的Properties对象
Properties props = new Properties();
props.setProperty("mail.store.protocol", protocol);
props.setProperty("mail.pop3.host", pop3Server);
// 使用Properties对象获得Session对象
Session session = Session.getInstance(props);
session.setDebug(true);
// 利用Session对象获得Store对象,并连接pop3服务器
Store store = session.getStore();
store.connect(pop3Server, user, pwd);
// 获得邮箱内的邮件夹Folder对象,以"只读"打开
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);
// 获得邮件夹Folder内的所有邮件Message对象
Message [] messages = folder.getMessages();
ReciveMail rm = null;
for(int i=0;i<messages.size();i++){
rm = new ReciveMail((MimeMessage) messages[i]);
rm.recive(messages[i],i);;
}
folder.close(false);
store.close();
}
相关推荐
JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API
基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件收发系统.zip基于Javamail的邮件...
1、打开javamailsystem文件夹,找到javamail.jar可执行文件,双击该执行文件,即可打开Javamail邮件收发系统客户端软件。进入该系统后,首先选择“POP3/SMTP设置”按钮,对收发邮件所需的邮件服务器主机、收发邮件...
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP...
### 邮件接收流程 1. **配置 Properties**: 设置 POP3 或 IMAP 服务器信息。 2. **创建 Session**: 创建用于连接邮件服务器的 Session。 3. **获取 Store**: 通过 Session 的 `getStore()` 方法获取相应的 Store ...
2.ReceiveOneMail 从网上down下来的接收邮件类,可自动把收件箱中的附件下载到本地磁盘上。 另外两个类是工具类,SendMail会调用。 我是用myEclipse8.5。如果你无法直接导入,请重建项目然后把源码copy过去。 有...
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP...
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP...
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP...
java写的邮件收发系统
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP...
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP...
《基于Javamail的邮件收发系统》项目是一份全面的资料集合,包含了系统实现、相关文档、开题报告、任务书、外文翻译、文献综述以及答辩PPT等重要组成部分,旨在帮助读者深入理解和掌握使用JavaMail进行邮件收发的...
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。本系统利用SMTP...
(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统(Java毕业设计)基于Javamail的邮件收发系统...
**基于Javamail的邮件收发系统** JavaMail是一个开放源码的API,它为Java程序员提供了一套全面的接口来处理电子邮件。这个系统的设计目的是使得开发者能够方便地发送和接收邮件,包括附件、HTML内容以及MIME多部分...
这个类称为 MailInfo,包含了邮件的各种信息,例如邮件服务器的主机名和端口号、邮件发送者的地址、邮件接收者的地址、邮件主题、邮件内容、邮件附件等。 在 MailInfo 类中,我们定义了多个成员变量,用于存储邮件...
假设我们需要开发一个简单的JavaMail邮件收发系统,具体步骤如下: 1. **初始化Session**: - 创建`Properties`对象,设置邮件服务器信息。 - 创建`Session`对象,设置认证信息。 2. **创建邮件消息**: - 使用`...
2. IMAP 和 POP3 协议:对于邮件接收,JavaMail 提供了 `Folder` 和 `Message` 类来处理IMAP或POP3服务器上的邮箱。IMAP 允许用户在线查看邮件,而POP3通常将邮件下载到本地存储。使用 `Store` 类连接到服务器,然后...