利用JavaMail收/发Gmail邮件(SSL)

Gmail目前已经启用了POP3和SMTP服务,具体情况请看 http://www.javayou.com/showlog.jspe?log_id=490



与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:




1. 邮件收取

Java代码 复制代码  收藏代码
  1. package lius.javamail.ssl;   
  2.   
  3. import java.io.UnsupportedEncodingException;   
  4. import java.security.*;   
  5. import java.util.Properties;   
  6. import javax.mail.*;   
  7. import javax.mail.internet.InternetAddress;   
  8. import javax.mail.internet.MimeUtility;   
  9.   
  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. }  
package lius.javamail.ssl;

import java.io.UnsupportedEncodingException;
import java.security.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;

/**
 * 用于收取Gmail邮件
 * @author Winter Lau
 */
public class GmailFetch {
 
 public static void main(String argv[]) throws Exception {

  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

  // Get a Properties object
  Properties props = System.getProperties();
  props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.pop3.socketFactory.fallback", "false");
  props.setProperty("mail.pop3.port", "995");
  props.setProperty("mail.pop3.socketFactory.port", "995");

  //以下步骤跟一般的JavaMail操作相同
  Session session = Session.getDefaultInstance(props,null);

  //请将红色部分对应替换成你的邮箱帐号和密码
  URLName urln = new URLName("pop3","pop.gmail.com",995,null,
    "[邮箱帐号]", "[邮箱密码]");
  Store store = session.getStore(urln);
  Folder inbox = null;
  try {
   store.connect();
   inbox = store.getFolder("INBOX");
   inbox.open(Folder.READ_ONLY);
   FetchProfile profile = new FetchProfile();
   profile.add(FetchProfile.Item.ENVELOPE);
   Message[] messages = inbox.getMessages();
   inbox.fetch(messages, profile);
   System.out.println("收件箱的邮件数:" + messages.length);
   for (int i = 0; i < messages.length; i++) {
    //邮件发送者
    String from = decodeText(messages[i].getFrom()[0].toString());
    InternetAddress ia = new InternetAddress(from);
    System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');
    //邮件标题
    System.out.println("TITLE:" + messages[i].getSubject());
    //邮件大小
    System.out.println("SIZE:" + messages[i].getSize());
    //邮件发送时间
    System.out.println("DATE:" + messages[i].getSentDate());
   }
  } finally {
   try {
    inbox.close(false);
   } catch (Exception e) {}
   try {
    store.close();
   } catch (Exception e) {}
  }
 }
 
 protected static String decodeText(String text)
   throws UnsupportedEncodingException {
  if (text == null)
   return null;
  if (text.startsWith("=?GB") || text.startsWith("=?gb"))
   text = MimeUtility.decodeText(text);
  else
   text = new String(text.getBytes("ISO8859_1"));
  return text;
 }

}


2. 发送邮件

Java代码 复制代码  收藏代码
  1. package lius.javamail.ssl;   
  2.   
  3. import java.security.Security;   
  4. import java.util.Date;   
  5. import java.util.Properties;   
  6.   
  7. import javax.mail.Authenticator;   
  8. import javax.mail.Message;   
  9. 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. }  
package lius.javamail.ssl;

import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 使用Gmail发送邮件
 * @author Winter Lau
 */
public class GmailSender {

 public static void main(String[] args) throws AddressException, MessagingException {
  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
  // Get a Properties object
  Properties props = System.getProperties();
  props.setProperty("mail.smtp.host", "smtp.gmail.com");
  props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.smtp.socketFactory.fallback", "false");
  props.setProperty("mail.smtp.port", "465");
  props.setProperty("mail.smtp.socketFactory.port", "465");
  props.put("mail.smtp.auth", "true");
  final String username = "[邮箱帐号]";
  final String password = "[邮箱密码]";
  Session session = Session.getDefaultInstance(props, new Authenticator(){
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(username, password);
      }});

       // -- Create a new message --
  Message msg = new MimeMessage(session);

  // -- Set the FROM and TO fields --
  msg.setFrom(new InternetAddress(username + "@mo168.com"));
  msg.setRecipients(Message.RecipientType.TO, 
    InternetAddress.parse("[收件人地址]",false));
  msg.setSubject("Hello");
  msg.setText("How are you");
  msg.setSentDate(new Date());
  Transport.send(msg);
  
  System.out.println("Message sent.");
 }
}



关于邮件的解析请看 http://www.javayou.com/showlog.jspe?log_id=372
更多关于javamail的文章 http://www.javayou.com/main.jspe?query=javamail

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值