关于我们
About Us
网站建设
Site Design
售后服务
Call Center
经典案例
Projects
技术资料
Source
公司产品
Products
留言板
FeedBack
网站维护
Maintenance
 
 首页>> 技术资料>>JSP  
利用JavaMail收/发Gmail邮件SSL

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

1. 邮件收取

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. 发送邮件

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.");

 }

}

 
 
北京四方互动网络技术有限公司
© 版权所有 2001-2005
地址:北京市海淀区知春路豪景佳苑3号楼401室
邮编:100086 公司地图
业务专线:010-62568654 62106102
传  真:010-82611617
公司总机:62106100/1/2/3
售后服务:分机808、881、812