2014-02-11 50 views
0

我是新的Java邮件API,我试图实现一个使用Tomcat服务器的Web应用程序,它读取我读取Gmail收件箱并正常工作。但是,当我上传我的代码开发服务器,它抛出异常Java邮件API连接存储在本地服务器但未连接到开发服务器

javax.mail.AuthenticationFailedException: [ALERT] Please log in via your web browser: http://support.google.com/mail/accounts/bin/answer.py?answer=78754 (Failure) 
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:660) 
    at javax.mail.Service.connect(Service.java:317) 
    at sales_order.ReadInquiryViaEmail.run(ReadInquiryViaEmail.java:89) 
    at java.lang.Thread.run(Thread.java:662) 

下方,我的代码是

public class ReadInquiryViaEmail implements Runnable { 

    public ReadInquiryViaEmail(ServletContext context, String emailAddress, 
           String domainName, String protocol, String password) { 

     this.sContext = context; 
     this.domainName = domainName; 
     this.emailAddress = emailAddress; 
     this.password = password; 
     this.protocol = protocol; 
    } 

    public void run() { 
     Properties imapProps;=new Properties(); 
     imapProps.setProperty("mail.host", domainName); 
     imapProps.setProperty("mail.port", "993"); 
     imapProps.setProperty("mail.transport.protocol", protocol); 
     imapProps.setProperty("mail.imaps.starttls.enable", "true"); 
     imapProps.setProperty("username", emailAddress); 
     imapProps.setProperty("password", password); 

     int port = Integer.parseInt("993"); 

     Authenticator authenticator = new Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication(emailAddress, password); 
      } 
     }; 

     Session mailSession = Session.getInstance(imapProps, authenticator); 

     try { 

      Store store = mailSession.getStore(protocol); 
      store.connect(domainName, port, emailAddress, password); 

      Folder folder = store.getFolder("Inbox"); 
      folder.open(Folder.READ_WRITE); 

      folder.getMessages(); 
      FlagTerm term = new FlagTerm(new Flags(Flags.Flag.SEEN), false); 
      Message[] messages = folder.search(term); 
      System.out.println("messages.length > " + messages.length); 
      if (messages.length > 0) { 
       InternetAddress[] autoResponseEmailAddress = 
         new InternetAddress[messages.length]; 

       String autoResponseNames[] = new String[messages.length]; 
       Inquiry[] emailInquiries = new Inquiry[messages.length]; 
       String name = "", subject, emailAddress; 

       int index = 0; 
       System.out.println(" reading mails start "); 
       for (int j = (messages.length - 1); j > (-1); j--, index++) { 
        messages[j].setFlag(Flags.Flag.SEEN, true); 

        Address address = messages[j].getFrom()[0]; 

        autoResponseEmailAddress[j] = (InternetAddress) address; 
        autoResponseNames[j] = autoResponseEmailAddress[j].getPersonal(); 
        emailAddress = autoResponseEmailAddress[j].getAddress(); 

        name = autoResponseNames[j]; 
        subject = messages[j].getSubject(); 

        System.out.println(" name " + name); 
        System.out.println(" subject " + subject); 

       } 
      } 
      folder.close(false); 
      store.close(); 
      System.out.println("\n\ndone reading mails\n\n"); 
     } catch (javax.mail.NoSuchProviderException nspe) { 
      logError(nspe); 
     } catch (MessagingException e) { 
      logError(e); 
     } catch (Exception exp) { 
      logError(exp); 
     } 
    } 
} 

任何在上面的代码中缺少什么?

请帮忙。

在此先感谢。

回答

1

Google block authentication attempt。首先登录到Gmail帐户。 并确保您使用相同的的Gmail帐户 -

而且添加在你的代码如下 -

Properties props = new Properties(); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.port", "465"); 
props.put("mail.smtp.socketFactory.port", "465"); 
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.put("mail.smtp.auth", "true");