我用javaMail开发了一个邮件系统,收发邮件、各种邮件夹操作都没有问题。
为降低系统的耦合性,用xFire对上述邮件系统进行封装,以对外提供web服务。封装后,发邮件没有问题,但是接收邮件却报错,提示:
no authenticate invalid userid/password
javax.mail.authenticationfailedexception:authenticate invalid userid/password
提示验证错误,但用户名、密码都没有问题,而且在使用xFire前都是好的。不知是什么原因?请指点,多提建议。。

解决方案 »

  1.   

    传递的参数中能看到用户名,看不到密码代码如下:
    protocolConnect login,host=23.20.19.80,[email protected],password=<non-null>
    用户名与密码都没有问题是不是xFire传递密码还有什么特别的地方?
      

  2.   

    下面把详细代码帖出来:
    import com.sun.mail.pop3.POP3Folder;
    import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;public class receMailImpl implements IreceMail {
    public void rece(String receServer,String receName,String recePwd,String typeIndex,String folderName)
    {
    Folder folder = getFolder(receServer, receName, recePwd,typeIndex,folderName);
    }
    //返回相应属性的Folder
    public Folder getFolder(String receServer,String receName,String recePwd,String typeIndex,String folderName)
    {
    String foldername = "INBOX";//定义默认收件夹
    String typeStore = "";
    if(typeIndex=="0")
    typeStore = "pop3";
    else
    {
    typeStore = "imap";
    foldername = folderName;
    }
    Store store=null;
    Folder folder=null;
    //创建Properties
    Properties props=System.getProperties();
    ///这是后来添加的部分
    props.put("mail.transport.protocol","smtp");
    props.put("mail.debug","true");
    if(typeIndex == "0")
    {props.put("mail.store.protocol","pop3");}
    else
    {props.put("mail.store.protocol","imap");}
    //创建Session
    MyAu auth=new MyAu(receName,recePwd);
    Session session=Session.getDefaultInstance(props,auth);
    session.setDebug(true); 
    try 
    {
      store=session.getStore(typeStore);
      store.connect(receServer,receName,recePwd);
      folder=store.getFolder(foldername);
      if(folder==null)
      {
        throw new Exception(foldername + "is not exists");
      }
      folder.open(Folder.READ_WRITE);
    }
    catch (Exception e) 
    {
       e.printStackTrace();
    }   
    return folder;
    }
    }
    其中,上述getFolder用于获取邮件夹,经过测试成功。receMailImpl类为web服务接口实现类,其rece方法用于封闭getFolder方法。错误提示如下:DEBUG: setDebug: JavaMail version 1.4ea
    DEBUG: getProvider() returning javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc]
    DEBUG: mail.imap.fetchsize: 16384
    * OK IMAP4 Server (IMail 8.10)
    A0 CAPABILITY
    * CAPABILITY IMAP4 IMAP4rev1 AUTH=CRAM-MD5 AUTH=PLAIN AUTH=LOGIN
    A0 OK CAPABILITY completed
    IMAP DEBUG: AUTH: CRAM-MD5
    IMAP DEBUG: AUTH: PLAIN
    IMAP DEBUG: AUTH: LOGIN
    DEBUG: protocolConnect login, host=25.90.64.116, user=guojinhuai@PC118, password=<non-null>
    A1 AUTHENTICATE PLAIN
    + VXNlcm5hbWU6
    Z3VvamluaHVhaUBQQzExOABndW9qaW5odWFpQFBDMTE4ADEyMzQ1Ng==
    A1 NO AUTHENTICATE Invalid userid/password
    * OK IMAP4 Server (IMail 8.10)
    A0 CAPABILITY
    * CAPABILITY IMAP4 IMAP4rev1 AUTH=CRAM-MD5 AUTH=PLAIN AUTH=LOGIN
    A0 OK CAPABILITY completed
    IMAP DEBUG: AUTH: CRAM-MD5
    IMAP DEBUG: AUTH: PLAIN
    IMAP DEBUG: AUTH: LOGIN
    DEBUG: protocolConnect login, host=25.90.64.116, user=guojinhuai@PC118, password=<non-null>
    A1 AUTHENTICATE PLAIN
    + VXNlcm5hbWU6
    Z3VvamluaHVhaUBQQzExOABndW9qaW5odWFpQFBDMTE4ADEyMzQ1Ng==
    A1 NO AUTHENTICATE Invalid userid/password
    javax.mail.AuthenticationFailedException: AUTHENTICATE Invalid userid/password
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:474)
    at javax.mail.Service.connect(Service.java:297)
    at javax.mail.Service.connect(Service.java:156)
    at method.receMailImpl.getFolder(receMailImpl.java:70)
    at method.receMailImpl.rece(receMailImpl.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)