2014-01-30 56 views
0

我正在使用javamail api来配置一个接收器,但它抛出一个异常。我不知道如何解决它。我只是javamail的初学者。我实际上没有得到它想要我做的事情。请任何人给我适当的解决方案。 我的代码是:使用javamail接收邮件API

  package com.message; 
      import javax.mail.*; 
      import java.util.*; 
      import java.io.*; 
      public class Receiver 
      { 
      public static void main(String[] args) 
      { 
      Properties props = new Properties(); 
      String host = "pop3.gmail.com";  
      String username = "emailid";  
      String password = "pasword";  
      String provider = "pop3"; 
      try 
      {  
     // Connect to the POP3 server  
     Session session = Session.getInstance(props);  
     Store store = session.getStore(provider);  
     store.connect(host,username, password); 
     // Open the folder  
     Folder inbox = store.getFolder("INBOX");  
      if (inbox == null) 
      {   
      System.out.println("No INBOX"); 
      System.exit(1);  
      }  
       inbox.open(Folder.READ_ONLY); 
     // Get the messages from the server  
      Message[] messages = inbox.getMessages();  
       for (int i = 0; i < messages.length; i++) 
       {   
       System.out.println("Message"+(i+1));      
       messages[i].writeTo(System.out);  
       } 
       // Close the connection  
        // but don't remove the messages from the server  
       inbox.close(false);  
       store.close();  
        } 
        catch (MessagingException ex) 
        {  
       ex.printStackTrace();  
        } 
        catch(IOException ex) 
        { 
       ex.printStackTrace(); 
        } 
       } 
        } 

和例外是:

  javax.mail.MessagingException: Connect failed; 
      nested exception is: 
     java.net.UnknownHostException: pop3.gmail.com 
     at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:160) 
     at javax.mail.Service.connect(Service.java:291) 
     at javax.mail.Service.connect(Service.java:172) 
     at com.message.Receiver.main(Receiver.java:20) 
      Caused by: java.net.UnknownHostException: pop3.gmail.com 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:367) 
     at java.net.Socket.connect(Socket.java:524) 
     at java.net.Socket.connect(Socket.java:474) 
     at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:267) 
     at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227) 
     at com.sun.mail.pop3.Protocol.<init>(Protocol.java:91) 
     at com.sun.mail.pop3.POP3Store.getPort(POP3Store.java:213) 
     at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:156) 
     ... 3 more 

有谁请解决这个问题。

+0

请正确格式化您的代码,这样很难阅读。谢谢;-) –

+0

你可以更改主机为pop.gmail.com并运行.. – Kick

回答

0

此:

java.net.UnknownHostException: pop3.gmail.com 

告诉你,你的系统无法为pop3.gmail.com解析IP地址。有关更多信息,请参阅the doc

抛出以指示主机的IP地址不能为 确定。

您的DNS设置正确吗?你能ping那个主机吗? 是否正确主机名?

+0

是的....请告诉我为什么这是显示我pop3.gmail.com作为一个未知的主机? – user3202225

+0

这是为什么downvoted? –

+0

我不知道... – user3202225

1

尝试pop.gmail.com这显然是正确的地址。

+0

对不起,... 它给我看另一个例外,即 javax.mail.MessagingException:连接失败; 嵌套异常是: \t java.io.IOException的:连接在com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:160) \t在javax.mail.Service.connect(Service.java失败 \t :291) \t在javax.mail.Service.connect(Service.java:172) \t在com.message.Receiver.main(Receiver.java:20) 所致:java.io.IOException的:连接失败 – user3202225

+3

@ user3202225另一个异常=另一个问题。更新你的问题/发布一个新的。 – zapl

+0

尝试指定端口995. Gmail似乎使用非标准端口。 –

0

您还没有定义的端口 - 在主类的Gmail POP3 995

String protocol = "pop3"; 
String host = "pop.gmail.com"; 
String port = "995"; 

设置属性:

private Properties getServerProperties(String protocol, String host, String port) { 
    Properties properties = new Properties(); 

    // server setting 
    properties.put(String.format("mail.%s.host", protocol), host); 
    properties.put(String.format("mail.%s.port", protocol), port); 

    // SSL setting 
    properties.setProperty(
      String.format("mail.%s.socketFactory.class", protocol), 
      "javax.net.ssl.SSLSocketFactory"); 
    properties.setProperty(
      String.format("mail.%s.socketFactory.fallback", protocol), 
      "false"); 
    properties.setProperty(
      String.format("mail.%s.socketFactory.port", protocol), 
      String.valueOf(port)); 

    return properties; 
} 

收到电子邮件:

public void downloadEmails(String protocol, String host, String port, 
     String userName, String password) { 
    Properties properties = getServerProperties(protocol, host, port); 
    Session session = Session.getDefaultInstance(properties); 

    try { 
     // connects to the message store 
     Store store = session.getStore(protocol); 
     store.connect(userName, password); 

     // opens the inbox folder 
     Folder folderInbox = store.getFolder("INBOX"); 
     folderInbox.open(Folder.READ_ONLY); 

     // fetches new messages from server 
     Message[] messages = folderInbox.getMessages(); 

     for (int i = 0; i < messages.length; i++) { 
      Message msg = messages[i]; 
      Address[] fromAddress = msg.getFrom(); 
      String from = fromAddress[0].toString(); 
      String subject = msg.getSubject(); 
      String toList = parseAddresses(msg 
        .getRecipients(RecipientType.TO)); 
      String ccList = parseAddresses(msg 
        .getRecipients(RecipientType.CC)); 
      String sentDate = msg.getSentDate().toString(); 

      String contentType = msg.getContentType(); 
      String messageContent = ""; 

      if (contentType.contains("text/plain") 
        || contentType.contains("text/html")) { 
       try { 
        Object content = msg.getContent(); 
        if (content != null) { 
         messageContent = content.toString(); 
        } 
       } catch (Exception ex) { 
        messageContent = "[Error downloading content]"; 
        ex.printStackTrace(); 
       } 
      } 

      // print out details of each message 
      System.out.println("Message #" + (i + 1) + ":"); 
      System.out.println("\t From: " + from); 
      System.out.println("\t To: " + toList); 
      System.out.println("\t CC: " + ccList); 
      System.out.println("\t Subject: " + subject); 
      System.out.println("\t Sent Date: " + sentDate); 
      System.out.println("\t Message: " + messageContent); 
     } 

     // disconnect 
     folderInbox.close(false); 
     store.close(); 
    } catch (NoSuchProviderException ex) { 
     System.out.println("No provider for protocol: " + protocol); 
     ex.printStackTrace(); 
    } catch (MessagingException ex) { 
     System.out.println("Could not connect to the message store"); 
     ex.printStackTrace(); 
    } 
} 

最后:

public static void main(String[] args) { 
     // for POP3 
     String protocol = "pop3"; 
     String host = "pop.gmail.com"; 
     String port = "995"; 


     String userName = "your_email_address"; 
     String password = "your_email_password"; 

     EmailReceiver receiver = new EmailReceiver(); 
     receiver.downloadEmails(protocol, host, port, userName, password); 
    } 
相关问题