虽然jakarta的commons email 简化了javamail的使用,但是遇到复杂一点的东东,我们还是需要重新拿起javamail来,也许我们可以做.

其实javamail也不是太复杂 o_o 下面是通过gmail发送邮件,因为gmail需要smtp验证,所有要额外的设定
mail.smtp.auth 值为 true
并且添加
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

我们来看一下刘冬的代码:
http://www.javayou.com/showlog<wbr>.jspe?log_id=498

1. 邮件收取

 1package lius.javamail.ssl;
 2
 3import java.io.UnsupportedEncodingException;
 4import java.security.*;
 5import java.util.Properties;
 6import javax.mail.*;
 7import javax.mail.internet.InternetAddress;
 8import javax.mail.internet.MimeUtility;
 9
10/** *//**
11 * 用于收取Gmail邮件
12 * @author Winter Lau
13 */

14public 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. 发送邮件
 1package lius.javamail.ssl;
 2
 3import java.security.Security;
 4import java.util.Date;
 5import java.util.Properties;
 6
 7import javax.mail.Authenticator;
 8import javax.mail.Message;
 9import javax.mail.MessagingException;
10import javax.mail.PasswordAuthentication;
11import javax.mail.Session;
12import javax.mail.Transport;
13import javax.mail.internet.AddressException;
14import javax.mail.internet.InternetAddress;
15import javax.mail.internet.MimeMessage;
16
17/** *//**
18 * 使用Gmail发送邮件
19 * @author Winter Lau
20 */

21public 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}



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


end