`
shuany
  • 浏览: 253833 次
  • 性别: Icon_minigender_1
  • 来自: 中国
社区版块
存档分类
最新评论

用JavaMail通过转:MAP协议接收qq邮箱时出现“A0 BAD 命令无效或者不支持”的解决方法

阅读更多

转:http://blog.csdn.net/snowclash/archive/2011/01/24/6160999.aspx

 

最开始的java代码如下

 

  1. import java.io.UnsupportedEncodingException;  
  2. import java.util.Properties;  
  3. import javax.mail.Authenticator;  
  4. import javax.mail.Folder;  
  5. import javax.mail.MessagingException;  
  6. import javax.mail.PasswordAuthentication;  
  7. import javax.mail.Session;  
  8. import javax.mail.Store;  
  9. import ce.mail.models.ConnectionProfile;  
  10. public class ImapProtocolImpl extends Authenticator implements Protocol  
  11. {  
  12.     private Session session;  
  13.     private PasswordAuthentication authentication;  
  14.       
  15.     public ImapProtocolImpl(ConnectionProfile profile, String username, String password)  
  16.     {  
  17.         Properties props = new Properties();  
  18.         props.setProperty("mail.store.protocol", profile.getProtocol());  
  19.         props.setProperty("mail.imap.host", profile.getFetchServer());  
  20.         props.setProperty("mail.imap.port", profile.getFetchPort());  
  21.           
  22.         authentication = new PasswordAuthentication(username, password);  
  23.         session = Session.getInstance(props, this);  
  24.     }  
  25.       
  26.     @Override  
  27.     public PasswordAuthentication getPasswordAuthentication()  
  28.     {  
  29.         return this.authentication;  
  30.     }  
  31.       
  32.     public void connect()  
  33.     {  
  34.         try  
  35.         {  
  36.             Store store = session.getStore();  
  37.             store.connect();  
  38.             Folder root = store.getDefaultFolder();  
  39.             Folder inbox = root.getFolder("inbox");  
  40.             inbox.open(Folder.READ_WRITE);  
  41.             System.out.println(inbox.getMessageCount());  
  42.         }  
  43.         catch (MessagingException e)  
  44.         {  
  45.             try  
  46.             {  
  47.                 byte[] buf = e.getMessage().getBytes("ISO-8859-1");  
  48.                 System.out.println(new String(buf, "GBK"));  
  49.             }  
  50.             catch (UnsupportedEncodingException e1)  
  51.             {  
  52.                 e1.printStackTrace();  
  53.             }  
  54.             throw new RuntimeException("登录失败", e);  
  55.         }  
  56.     }  
  57. }  

 

该程序连接163邮箱时是正常的,但连接qq邮箱时会出错。

调用session.setDebug(true);后发现连qq邮箱的debug信息如下

 

  1. DEBUG: setDebug: JavaMail version 1.4.3  
  2. DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc]  
  3. DEBUG: mail.imap.fetchsize: 16384  
  4. DEBUG: mail.imap.statuscachetimeout: 1000  
  5. DEBUG: mail.imap.appendbuffersize: -1  
  6. DEBUG: mail.imap.minidletime: 10  
  7. DEBUG: trying to connect to host "imap.qq.com", port 143, isSSL false  
  8. * OK [CAPABILITY IMAP4 IMAP4rev1 AUTH=LOGIN NAMESPACE] QQMail IMAP4Server ready  
  9. IMAP DEBUG: AUTH: LOGIN  
  10. DEBUG: protocolConnect login, host=imap.qq.com, user=<qq号码>, password=<non-null>  
  11. A0 AUTHENTICATE LOGIN  
  12. A0 BAD ������Ч���߲�֧��  
  13. A0 BAD 命令无效或者不支持  

 

上Google搜“java mail imap qq 邮箱”,发现《JavaMail中接收邮件的问题 》里提到,需要设置mail.imap.auth.plain.disable为true,但设置完后仍会出错。

继续搜mail.imap.auth.plain.disable,在api文档 中发现另外一个属性mail.imap.auth.login.disable,文档中提到“If true, prevents use of the non-standard AUTHENTICATE LOGIN command, instead using the plain LOGIN command. Default is false.”,而根据debug信息,连接qq邮箱也是在A0 AUTHENTICATE LOGIN之后提示错误,所以明显是这个参数的问题。

设置参数mail.imap.auth.login.disable为true后连接qq邮箱正常,最终程序如下

 

  1. import java.io.UnsupportedEncodingException;  
  2. import java.util.Properties;  
  3. import javax.mail.Authenticator;  
  4. import javax.mail.Folder;  
  5. import javax.mail.MessagingException;  
  6. import javax.mail.PasswordAuthentication;  
  7. import javax.mail.Session;  
  8. import javax.mail.Store;  
  9. import ce.mail.models.ConnectionProfile; 
    分享到:
    评论

相关推荐

    命令发送接收javamail

    问题在于,在尝试连接和操作邮箱时遇到了"A0 BAD 命令无效或者不支持"的错误。这通常意味着服务器不理解或不接受发送的命令。让我们详细分析一下代码并探讨可能的解决方案: 1. **配置属性**:在类的构造函数中,...

    javaMail源代码,可以使用QQ邮箱等发送邮件

    这个压缩包包含的源代码示例展示了如何使用JavaMail API通过QQ邮箱发送邮件,这对于开发者来说是一个实用的工具,尤其是在开发用户注册验证或通知功能时。让我们深入探讨一下JavaMail的核心概念以及如何使用它与QQ...

    JavaMail教程:使用IMAP协议接收并解析电子邮件 - 为程序员服务.zip

    JavaMail 是一个强大的开源库,它允许Java开发者在应用程序中收发电子邮件。在这个教程中,我们将专注于使用...同时,还可以探索其他邮件协议如POP3,或者使用JavaMail的更多高级特性,如SSL/TLS加密、垃圾邮件过滤等。

    Java通过Exchange协议发送和接收邮件

    然而,JavaMail API并不直接支持Exchange服务器,因此在与Exchange服务器交互时,我们需要借助EWS Java API。微软官方提供的EWSJavaAPI_1.2.jar包是专门为Java开发者设计的,用于与Exchange服务器进行通讯,支持包括...

    javamail的jar包:javamail-1.6

    使用`javamail-1.6`时,开发者需要将其添加到项目依赖中,然后通过创建邮件会话,构建邮件消息对象,设置发件人、收件人、主题和正文,最后通过Transport类发送邮件。对于接收邮件,可以通过Folder和Message对象进行...

    javamail发送、接收邮件

    通过解析给定文件的标题、描述、标签及部分内容,我们可以深入探讨javamail发送与接收邮件的详细教程,以及如何利用JavaMail API实现邮件功能。 ### javamail发送、接收邮件 JavaMail API是由Sun Microsystems开发...

    JavaMail 具备垃圾邮件过滤功能的邮箱

    JavaMail 是一个强大的Java库,它允许开发人员在Java应用程序中实现邮件的发送、接收以及管理功能。这个项目不仅提供了SMTP、POP3和IMAP协议的支持,还包含了丰富的API,可以方便地处理邮件的MIME编码、附件、HTML...

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

    JavaMail是一种开源的Java库,它允许开发人员在Java应用程序中发送和接收电子邮件。IMAP(Internet Message Access Protocol)是一种标准的邮件访问协议,用于从邮件服务器检索邮件。Exchange 2007是微软的企业级...

    javamail接收(pop3)邮件

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/804788

    javamail 收发电子邮件

    2. IMAP 和 POP3 协议:对于邮件接收,JavaMail 提供了 `Folder` 和 `Message` 类来处理IMAP或POP3服务器上的邮箱。IMAP 允许用户在线查看邮件,而POP3通常将邮件下载到本地存储。使用 `Store` 类连接到服务器,然后...

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    ### JavaMail发送邮件时遇到的问题及解决方法 在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将...

    javamail开发邮箱使用的jar包

    以上就是关于 "javamail 开发邮箱使用的 jar 包" 的详细说明,包括了核心库 mail.jar、JAF 库 activation.jar 以及可能包含额外功能的 additionnal.jar 的作用和使用方法。在实际开发中,根据具体需求,你可能还需要...

    JavaMail邮箱验证实现

    JavaMail是一种在Java应用程序中发送和接收电子邮件的标准API,它为开发者提供了强大的功能,使得处理邮件变得更加简单。在用户注册和重置密码等场景中,邮箱验证是一个关键步骤,可以确保用户提供的邮箱地址有效,...

    使用javaMail发邮件及收取邮箱未读邮件并标记为已读

    接收邮件时,我们通常使用 IMAP 协议,因为它支持离线模式,并且可以管理邮箱中的邮件状态,比如未读或已读。创建 `Store` 对象后,通过 `getStore("imap")` 连接到邮件服务器,然后打开指定的邮箱 folder,例如 `...

    JAVA100例之实例48 使用JavaMail接收邮件

    以上就是关于"JAVA100例之实例48 使用JavaMail接收邮件"的主要内容,通过学习和实践这个实例,开发者将能够熟练地使用JavaMail API来实现邮件的接收功能,这对于构建自动化邮件系统或者处理邮件相关的业务需求非常有...

    基于javamail接收邮件源代码

    例如,`getFrom()`方法用来获取发件人的地址和姓名,通过`getFrom()`方法,我们可以获取`MimeMessage`对象中的发件人信息,并将个人名称和个人邮箱地址结合在一起返回。 `getMailAddress(String type)`方法则用于...

    javamail jar包

    对于开发复杂的邮件应用,如企业级的邮件服务器客户端或者需要处理大量邮件的系统,JavaMail是一个不可或缺的工具。由于其强大的功能和广泛的协议支持,JavaMail被广泛应用于各种Java应用程序中。

    javaMail 用java实现的邮箱验证,找回密码

    JavaMail 是一个强大的开源库,专门用于在Java应用程序中处理电子邮件。它提供了全面的API,使得开发者能够方便地发送、接收和操作邮件。本项目主要关注的是使用JavaMail实现邮箱验证和找回密码的功能,这对于任何...

    使用jsp实现javaMail邮箱功能开发

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JavaMail API则是一个用于处理电子邮件的库。本项目旨在利用JSP和JavaMail API实现在Web应用中发送邮件的功能,主要涉及POP3协议。下面...

    邮箱验证--javamail的简单使用

    JavaMail 是一个开源库,用于在Java应用程序中发送和接收电子邮件。这个库提供了一套全面的API,使得开发者能够方便地处理SMTP、POP3、IMAP等邮件协议。本篇文章将详细探讨JavaMail的简单使用,包括如何设置、配置...

Global site tag (gtag.js) - Google Analytics