`

收邮件、更改邮件标志 javamai +imap

    博客分类:
  • Java
阅读更多

 

来源:http://blog.csdn.net/superstorm5/archive/2008/03/07/2157022.aspx

网上很多用pop3收邮件的例子,但是用pop3收邮件只能获取收件箱里面所有邮件,邮件是否已读等标记无法获取,使用imap协议则避免了这个尴尬,imap不仅能获得一个邮件的详细信息(比如是否已读,是否回复),它还允许用户更改邮件的标记,但是目前支持imap协议的邮件服务器并不多,我知道的只有21cn和gmail,下面的例子中使用了代理 、SSL认证多个内容,请大家参考。

      代码如下:

package com.yourcompany.mail;

import java.io.*;

import java.security.Security;
import java.text.*;

import java.util.*;

import javax.mail.*;

import javax.mail.internet.*;

public class gmailRead {

    
private MimeMessage mimeMessage = null;

    
private String saveAttachPath = ""// 附件下载后的存放目录

    
private StringBuffer bodytext = new StringBuffer();// 存放邮件内容的StringBuffer对象

    
private String dateformat = "yy-MM-dd HH:mm"// 默认的日前显示格式

    
/**
     * * 構造函数,初始化一个MimeMessage對象
     * 
     
*/


    
public gmailRead() {

    }


    
public gmailRead(MimeMessage mimeMessage) {

        
this.mimeMessage = mimeMessage;

        System.out.println(
"create a PraseMimeMessage object........");

    }


    
/**
     * * 獲取一个MimeMessage對象
     * 
     
*/


    
public void setMimeMessage(MimeMessage mimeMessage) {

        
this.mimeMessage = mimeMessage;

    }


    
/**
     * * 獲得發件人的地址和姓名
     * 
     
*/


    
public String getFrom() throws Exception {

        InternetAddress address[] 
= (InternetAddress[]) mimeMessage.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 獲得邮件的密送人地址
     * 
     
*/


    
public String getMailAddress(String type) throws Exception {

        String mailaddr 
= "";

        String addtype 
= type.toUpperCase();

        InternetAddress[] address 
= null;

        
if (addtype.equals("TO"|| addtype.equals("CC")

        
|| addtype.equals("BCC")) {

            
if (addtype.equals("TO")) {

                address 
= (InternetAddress[]) mimeMessage

                .getRecipients(Message.RecipientType.TO);

            }
 else if (addtype.equals("CC")) {

                address 
= (InternetAddress[]) mimeMessage

                .getRecipients(Message.RecipientType.CC);

            }
 else {

                address 
= (InternetAddress[]) mimeMessage

                .getRecipients(Message.RecipientType.BCC);

            }


            
if (address != null{

                
for (int i = 0; i < address.length; i++{

                    String email 
= address[i].getAddress();

                    
if (email == null)

                        email 
= "";

                    
else {

                        email 
= MimeUtility.decodeText(email);

                    }


                    String personal 
= address[i].getPersonal();

                    
if (personal == null)

                        personal 
= "";

                    
else {

                        personal 
= MimeUtility.decodeText(personal);

                    }


                    String compositeto 
= personal + "<" + email + ">";

                    mailaddr 
+= "," + compositeto;

                }


                mailaddr 
= mailaddr.substring(1);

            }


        }
 else {

            
throw new Exception("Error emailaddr type!");

        }


        
return mailaddr;

    }


    
/**
     * * 獲得郵件主题
     * 
     
*/


    
public String getSubject() throws MessagingException {

        String subject 
= "";

        
try {

            subject 
= MimeUtility.decodeText(mimeMessage.getSubject());

            
if (subject == null)

                subject 
= "";

        }
 catch (Exception exce) {

        }


        
return subject;

    }


    
/**
     * * 獲得郵件的發送日期
     * 
     
*/


    
public String getSentDate() throws Exception {

        Date sentdate 
= mimeMessage.getSentDate();

        SimpleDateFormat format 
= new SimpleDateFormat(dateformat);

        
return format.format(sentdate);

    }


    
/**
     * * 獲得郵件的正文内容
     * 
     
*/


    
public String getBodyText() {

        
return bodytext.toString();

    }


    
/**
     * 
     * 解析郵件,把得到的郵件内容保存到一个StringBuffer对象中,解析邮件 *
     * 
     * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
     * 
     
*/


    
public void getMailContent(Part part) throws Exception {

        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 counts = multipart.getCount();

            
for (int i = 0; i < counts; i++{

                getMailContent(multipart.getBodyPart(i));

            }


        }
 else if (part.isMimeType("message/rfc822")) {

            getMailContent((Part) part.getContent());

        }
 else {

        }


    }


    
/**
     * * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
     * 
     
*/


    
public boolean getReplySign() throws MessagingException {

        
boolean replysign = false;

        String needreply[] 
= mimeMessage

        .getHeader(
"Disposition-Notification-To");

        
if (needreply != null{

            replysign 
= true;

http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlo
分享到:
评论

相关推荐

    javamail通过imap协议收取邮件(Exchange2007)

    IMAP(Internet Message Access Protocol)是一种标准的邮件访问协议,用于从邮件服务器检索邮件。Exchange 2007是微软的企业级邮件服务器,支持IMAP、POP3等多种邮件协议。 在JavaMail中使用IMAP协议来收取...

    Imap邮件接收

    IMAP(Internet Message Access Protocol)邮件接收是一种标准的电子邮件协议,允许用户在邮件服务器上管理邮件。相较于POP3,IMAP提供了更多的功能,比如离线阅读、邮件分类、标记和搜索等。它允许用户在不下载全部...

    Python的IMAP接收邮件程序

    Python的IMAP接收邮件程序

    邮件接收客户端(delphi7+access+sakmail)

    Sakmail控件是用于Delphi中的邮件处理组件,它支持POP3、IMAP4等多种邮件协议,使得开发者能够轻松地集成邮件功能到自己的应用中。在这个邮件接收客户端中,Sakmail控件负责连接到邮件服务器,接收邮件,并将邮件...

    lumisoft pop3 imap接收邮件

    Lumisoft是一家专注于提供网络通信解决方案的公司,他们的产品中包含了POP3和IMAP这两种常用的邮件接收协议。本文将深入探讨Lumisoft如何利用这两种协议帮助用户有效地接收邮件。 POP3(Post Office Protocol ...

    postfix+cyrus-IMAP+cyrus-SASL+MySQL

    Cyrus-IMAP是一个强大的邮件存储和检索服务器,支持IMAP4rev1和POP3协议,允许用户通过多种客户端访问和管理邮件。Cyrus-IMAP的优势在于其高效的多线程设计和对大型邮件存储的优化。它提供了对邮件的全文搜索、邮件...

    一个使用LumiSoft.Net.IMAP接收邮件的例子

    LumiSoft.Net.IMAP库为C#开发者提供了一个强大的工具,用于通过IMAP协议接收和管理邮件。在这个例子中,我们将深入探讨如何利用LumiSoft.Net.IMAP库创建一个简单的控制台应用程序来接收邮件。 首先,LumiSoft.Net....

    收发电子邮件易语言源码

    本压缩包包含的"IMAP+SMTP+SSL+IPV6.e"源码文件,是实现收发电子邮件功能的易语言代码示例,特别强调了对IPv4和IPv6的支持以及SSL安全连接,这在当今网络安全需求日益增强的背景下显得尤为重要。 首先,我们来了解...

    delphi2010版本IMAP协议下载邮件,能自动获取大附件下载地址

    IMAP协议是一种标准的邮件访问协议,允许用户从邮件服务器上检索电子邮件,而无需将邮件实际存储在本地设备上。在Delphi 2010这样的集成开发环境中,利用IMAP协议可以实现高效、可靠的邮件处理功能。 本项目标题...

    S22.IMAP邮件C#IMAP开源库

    IMAP是一种标准的邮件协议,允许用户从邮件服务器上下载邮件,而不必将邮件存储在本地设备上。这使得用户可以从任何地方访问他们的邮件,并保持同步。与POP3协议相比,IMAP提供了更高级的功能,如邮件的分类、标记和...

    邮件接收IMAP类

    用于接收邮件IMAP类库,有POP3接收邮件的EMail.dll类库也已上传,若有需要,自己找吧

    邮件库 IMAP/STMP/POP3 Email Library C/C++

    SMTP库允许开发者编写程序来创建、编辑和发送邮件,包括添加附件、设置发件人和收件人、处理邮件头信息等。在Email Library中,SMTP功能使得开发者可以轻松实现邮件的发送功能。 3. **POP3 (Post Office Protocol ...

    php_imap.dll(php收邮件要用到的一个插件)

    php_imap.dll(php收邮件要用到的一个插件)

    易语言邮箱IMAP收取类模块源码

    源码通过套接字实现了IMAP指令获取邮件,源码实现了链接收信服务器_IMAP,登录邮箱,发送数据,接收数据,发送IMAP命令,断开连接等命令。点评:源码调用了常量支持库,如果易语言没有这个支持库,请自行在网站上...

    C# 使用 MailKit 接收邮件

    它提供了一个强大且易于使用的 API,支持多种邮件协议,包括 SMTP、POP3、和 IMAP。 MailKit 是一个开源的 C# 邮件处理库,用于在应用程序中发送和接收电子邮件。它提供了一个强大且易于使用的 API,支持多种邮件...

    C# IMAP协议邮件附件获取 引用MailKit

    在IT领域,尤其是在电子邮件开发中,使用IMAP(Internet Message Access Protocol)协议是常见的方法,它允许客户端应用程序从邮件服务器上检索邮件。本教程将详细讲解如何使用C#语言结合MailKit库来实现IMAP协议...

    vc++邮件收发器,接收邮件程序

    在VC++中,需要实现POP3或IMAP4客户端,登录邮件服务器,列出邮件,下载指定邮件,以及可能的邮件操作。 3. **MFC库**:MFC库为开发者提供了许多预先包装好的类,简化了窗口、控件、网络、数据库等操作。在本项目中...

    lumisoft pop3 imap接收邮件(2018)

    lumisoft pop3 imap接收邮件总结的两种方法,希望对大家写接收邮件有帮助。。感觉不错就给点评论吧。谢谢。 我有用Mailkit写了个邮件审批实例,感觉比lumisoft更简单,更快 ...

    C#使用Pop3接收邮件(可接收163,QQ邮箱等)

    这可能是由于安全或性能考虑,因此,如果你需要获取历史邮件,可能需要考虑使用IMAP协议或者API接口,如QQ邮箱的SMTP/POP3/IMAP API。 在实际项目中,你还需要考虑错误处理和异常捕获,确保在出现问题时能够优雅地...

    Qt pop3接收邮件并下载附件程序

    在本文中,我们将深入探讨如何使用Qt库中的POP3功能来实现自动登录邮箱、接收邮件以及下载附件。Qt是一个跨平台的应用程序开发框架,广泛应用于C++编程,它提供了丰富的功能,包括网络通信模块,使得我们可以方便地...

Global site tag (gtag.js) - Google Analytics