今天下载了commons-mail发送邮件,结果出了点问题,调试了大半天,才调试成功,下面把我的正确代码贴出,并把遇到的问题总结一下。
先把正确代码贴出,我尝试了三种邮箱,163、Yahoo、gmail。
163和Yahoo,基本类似,只有smtp服务器不一样,代码如下:
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
public class TestMain163Smiple {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  SimpleEmail email = new SimpleEmail();
  try {
   email.setHostName("smtp.163.com"); //Yahoo的服务器地址是:smtp.mail.yahoo.com
   email.addTo(" 发送到的地址", "John Doe");
   email.setFrom(" 发送的邮件地址", "Mr Smith");
   email.setAuthentication(" 用户名", "密码");
   email.setSubject("Test message");
   email.setMsg("This is a simple test of commons-email");
   email.send();
  } catch (EmailException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
gmail:
import java.util.Properties;
import javax.mail.Session;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
public class TestMainGmailSmiple {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  SimpleEmail email = new SimpleEmail();
  try {
   email.setHostName("smtp.gmail.com");
   email.setSSL(Boolean.TRUE); // 设定是否使用SSL
   email.setSslSmtpPort("465"); // 设定SSL端口
   email.addTo(" 发送到的地址", "John Doe");
   email.setFrom(" 发送的邮件地址", "Mr Smith");
   email.setAuthentication(" 用户名", "密码");
   email.setSubject("Test message");
   email.setMsg("This is a simple test of commons-email");
   email.send();
  } catch (EmailException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}
下面说我遇到的问题:
首先是jar包的问题,因为不是只下载commons-mail的jar包,如果是jdk1.5或者1.5以下的版本,还需要下载sun的mail.jar和jaf的jar包,如果是jdk6的话只需要mail.jar就可以了。具体下载地址去sun网站自己找找就行了,
然后就是要开启邮箱的smtp服务,具体的进入邮箱进行设置就可以了。一般都很简单。
最后就是gmail,gmail跟其他的邮箱的不同之处在于它的默认端口不是普通的25,而是465,所以需要在程序中动态设置一下,设置的具体方法就是:
   email.setSSL(Boolean.TRUE); // 设定是否使用SSL
   email.setSslSmtpPort("465"); // 设定SSL端口
如果出了这种错误基本上就是没设置端口的原因:
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:25
 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242)
 at org.apache.commons.mail.Email.send(Email.java:1267)
 at TestMainGmailSmiple.main(TestMainGmailSmiple.java:24)
Caused by: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. 21sm7388726ywh.46
 at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829)
 at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1368)
 at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:886)
 at javax.mail.Transport.send0(Transport.java:191)
 at javax.mail.Transport.send(Transport.java:120)
 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232)
 ... 2 more
希望对大家能有所帮助。