今天下载了commons-mail发送邮件,结果出了点问题,调试了大半天,才调试成功,下面把我的正确代码贴出,并把遇到的问题总结一下。
先把正确代码贴出,我尝试了三种邮箱,163、Yahoo、gmail。
163和Yahoo,基本类似,只有smtp服务器不一样,代码如下:
imp ort org.apache.commons.mail.EmailException;
imp ort 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:
imp ort java.util.Properties;
imp ort javax.mail.Session;
imp ort org.apache.commons.mail.EmailException;
imp ort 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
希望对大家能有所帮助。