http://supermand9362787.wordpress.com/2008/11/02/javamail-for-google/
利用JavaMail收/發Gmail郵件(SSL)
Gmail目前已經啟用了POP3和SMTP服務,具體情況請看 http://www.javayou.com/showlog.jspe?log_id=490與其他郵箱不同的是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("FROMia.getPersonal()+'(‘+ia.getAddress()+’)’); //郵件標題 System.out.println("TITLEmessages[i].getSubject()); //郵件大小 System.out.println("SIZEmessages[i].getSize()); //郵件發送時間 System.out.println("DATEmessages[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.authrue"); 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."); } }
沒有留言:
張貼留言