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 }