zoukankan      html  css  js  c++  java
  • POP3_使用SSL链接邮箱并获取邮件

    Gmail目前已经启用了POP3和SMTP服务,与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:
    1. [代码]GmailFetch.java     跳至 [1] [2] [全屏预览]
    01    package lius.javamail.ssl;    
    02         
    03    import java.io.UnsupportedEncodingException;    
    04    import java.security.*;    
    05    import java.util.Properties;    
    06    import javax.mail.*;    
    07    import javax.mail.internet.InternetAddress;    
    08    import javax.mail.internet.MimeUtility;    
    09         
    10    /**    
    11     * 用于收取Gmail邮件    
    12     * @author Winter Lau    
    13     */    
    14    public class GmailFetch {    
    15          
    16     public static void main(String argv[]) throws Exception {    
    17         
    18      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());    
    19      final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";    
    20         
    21      // Get a Properties object    
    22      Properties props = System.getProperties();    
    23      props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);    
    24      props.setProperty("mail.pop3.socketFactory.fallback", "false");    
    25      props.setProperty("mail.pop3.port", "995");    
    26      props.setProperty("mail.pop3.socketFactory.port", "995");    
    27         
    28      //以下步骤跟一般的JavaMail操作相同    
    29      Session session = Session.getDefaultInstance(props,null);    
    30         
    31      //请将红色部分对应替换成你的邮箱帐号和密码    
    32      URLName urln = new URLName("pop3","pop.gmail.com",995,null,    
    33        "[邮箱帐号]", "[邮箱密码]");    
    34      Store store = session.getStore(urln);    
    35      Folder inbox = null;    
    36      try {    
    37       store.connect();    
    38       inbox = store.getFolder("INBOX");    
    39       inbox.open(Folder.READ_ONLY);    
    40       FetchProfile profile = new FetchProfile();    
    41       profile.add(FetchProfile.Item.ENVELOPE);    
    42       Message[] messages = inbox.getMessages();    
    43       inbox.fetch(messages, profile);    
    44       System.out.println("收件箱的邮件数:" + messages.length);    
    45       for (int i = 0; i < messages.length; i++) {    
    46        //邮件发送者    
    47        String from = decodeText(messages[i].getFrom()[0].toString());    
    48        InternetAddress ia = new InternetAddress(from);    
    49        System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');    
    50        //邮件标题    
    51        System.out.println("TITLE:" + messages[i].getSubject());    
    52        //邮件大小    
    53        System.out.println("SIZE:" + messages[i].getSize());    
    54        //邮件发送时间    
    55        System.out.println("DATE:" + messages[i].getSentDate());    
    56       }    
    57      } finally {    
    58       try {    
    59        inbox.close(false);    
    60       } catch (Exception e) {}    
    61       try {    
    62        store.close();    
    63       } catch (Exception e) {}    
    64      }    
    65     }    
    66          
    67     protected static String decodeText(String text)    
    68       throws UnsupportedEncodingException {    
    69      if (text == null)    
    70       return null;    
    71      if (text.startsWith("=?GB") || text.startsWith("=?gb"))    
    72       text = MimeUtility.decodeText(text);    
    73      else    
    74       text = new String(text.getBytes("ISO8859_1"));    
    75      return text;    
    76     }    
    77         
    78    }    
    2. [代码]GmailSender.java     
    01    package lius.javamail.ssl;    
    02         
    03    import java.security.Security;    
    04    import java.util.Date;    
    05    import java.util.Properties;    
    06         
    07    import javax.mail.Authenticator;    
    08    import javax.mail.Message;    
    09    import javax.mail.MessagingException;    
    10    import javax.mail.PasswordAuthentication;    
    11    import javax.mail.Session;    
    12    import javax.mail.Transport;    
    13    import javax.mail.internet.AddressException;    
    14    import javax.mail.internet.InternetAddress;    
    15    import javax.mail.internet.MimeMessage;    
    16         
    17    /**    
    18     * 使用Gmail发送邮件    
    19     * @author Winter Lau    
    20     */    
    21    public class GmailSender {    
    22         
    23     public static void main(String[] args) throws AddressException, MessagingException {    
    24      Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());    
    25      final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";    
    26      // Get a Properties object    
    27      Properties props = System.getProperties();    
    28      props.setProperty("mail.smtp.host", "smtp.gmail.com");    
    29      props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);    
    30      props.setProperty("mail.smtp.socketFactory.fallback", "false");    
    31      props.setProperty("mail.smtp.port", "465");    
    32      props.setProperty("mail.smtp.socketFactory.port", "465");    
    33      props.put("mail.smtp.auth", "true");    
    34      final String username = "[邮箱帐号]";    
    35      final String password = "[邮箱密码]";    
    36      Session session = Session.getDefaultInstance(props, new Authenticator(){    
    37          protected PasswordAuthentication getPasswordAuthentication() {    
    38              return new PasswordAuthentication(username, password);    
    39          }});    
    40         
    41           // -- Create a new message --    
    42      Message msg = new MimeMessage(session);    
    43         
    44      // -- Set the FROM and TO fields --    
    45      msg.setFrom(new InternetAddress(username + "@mo168.com"));    
    46      msg.setRecipients(Message.RecipientType.TO,    
    47        InternetAddress.parse("[收件人地址]",false));    
    48      msg.setSubject("Hello");    
    49      msg.setText("How are you");    
    50      msg.setSentDate(new Date());    
    51      Transport.send(msg);    
    52           
    53      System.out.println("Message sent.");    
    54     }    
    55    }
  • 相关阅读:
    JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
    JVM系列三:JVM参数设置、分析
    JVM系列二:GC策略&内存申请、对象衰老
    JVM系列一:JVM内存组成及分配
    windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
    微信小程序使用字体图标
    Jetson tx2 串口通信
    categorical[np.arange(n), y] = 1 IndexError: index 2 is out of bounds for axis 1 with size 2
    cannot import name '_imaging' 报错
    VS2015 opencv 无法打开文件“opencv_calib3d330d.lib”
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4362622.html
Copyright © 2011-2022 走看看