Receiving mail using javamail API

2019-09-08 15:13发布

i am using javamail api to configure a receiver but its throwing an exception. i don't know how to resolve it. i am just a beginner to javamail. i am actaully not getting what exactly it wants me to do. please anybody give me the proper solution. my code is:

          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();
                   }
                 }
                  }

and the exception is:

            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

anybody please solve this problem.

3条回答
ら.Afraid
2楼-- · 2019-09-08 15:54

This:

java.net.UnknownHostException: pop3.gmail.com

is telling you that your system can't resolve an IP address for pop3.gmail.com. See the doc for more information.

Thrown to indicate that the IP address of a host could not be determined.

Is your DNS set up correctly ? Can you ping that host ? Is that the correct hostname ?

查看更多
贪生不怕死
3楼-- · 2019-09-08 15:55

You have not defined port - for gmail pop3 995 in the main class

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

setup properties:

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;
}

get emails:

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();
    }
}

finally:

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);
    }
查看更多
不美不萌又怎样
4楼-- · 2019-09-08 16:06

Try pop.gmail.com that is apparently the right address.

查看更多
登录 后发表回答