简体   繁体   English

使用javamail API接收邮件

[英]Receiving mail using javamail API

i am using javamail api to configure a receiver but its throwing an exception. 我正在使用javamail api配置接收器,但抛出异常。 i don't know how to resolve it. 我不知道如何解决它。 i am just a beginner to javamail. 我只是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. 任何人请解决这个问题。

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

This: 这个:

java.net.UnknownHostException: pop3.gmail.com

is telling you that your system can't resolve an IP address for pop3.gmail.com . 告诉您您的系统无法解析pop3.gmail.com的IP地址。 See the doc for more information. 有关更多信息,请参见文档

Thrown to indicate that the IP address of a host could not be determined. 抛出该信号以指示无法确定主机的IP地址。

Is your DNS set up correctly ? 您的DNS是否设置正确? Can you ping that host ? 你能ping那个主机吗? Is that the correct hostname ? 那是正确的主机名吗?

You have not defined port - for gmail pop3 995 in the main class 您尚未定义端口-主类中为gmail pop3 995

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM