關鍵字: java email 郵件
記得曾經學習用javamail發郵件,學了2天,大概搞明白了利用javamail發郵件的方法和注意事項。
這周末在網上閑逛時,發現了另外一個發郵件的好東東。
commons-email-1.1.jar: 這是Apache組織下的一個項目,主要就是對java的郵件功能進行了封裝,用起來更加友善,簡單。
接下來我們就說說這個jar包。
首先肯定得下載下傳commons-email-1.1.jar,并下載下傳mail.jar和activation.jar(它們可以從sun的網站上下載下傳,從下載下傳的javamail和jaf中找到)。
如果沒有mail.jar,則會有:Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Message 這樣的錯誤提示。
如果沒有activation.jar,則會有:Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource 這樣的錯誤提示。
下面是一個簡單的測試。
Java代碼
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
public class Send
{
public Send()
{
}
public static void main(String[] args)
send();
public static void send()
SimpleEmail email = new SimpleEmail();
email.setTLS(true);
email.setHostName("smtp.gmail.com");
email.setAuthentication("
***@gmail.com", "***"); //使用者名和密碼
try
{
email.addTo("
[email protected]"); //接收方
email.setFrom("
[email protected]"); //發送方
email.setSubject("Java Mail Test"); //标題
email.setMsg("Just a simple send test ."); //内容
email.send();
} catch (EmailException e) {
e.printStackTrace();
}
}
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
public class Send
{
public Send()
{
}
public static void main(String[] args)
send();
public static void send()
SimpleEmail email = new SimpleEmail();
email.setTLS(true); //是否TLS校驗,,某些郵箱需要TLS安全校驗,同理有SSL校驗
// email.setSSL(true);
email.setHostName("smtp.gmail.com");
", "***"); //使用者名和密碼
try
{
email.addTo("
"); //接收方
email.addCc("
[email protected]"); //抄送方
email.addBcc("
[email protected]"); //秘密抄送方
email.setSubject("Java Mail Test"); //标題
email.setMsg("Just a simple send test ."); //内容
email.send();
} catch (EmailException e) {
e.printStackTrace();
}
}
上面的郵件标題和内容用的都是英文,如果改為中文呢?我試了一下,結果郵件标題不是亂碼,而郵件内容則中文部分是亂碼。設定其charSet為GB2312或者UTF-8後就可以發送中文郵件了,顯示正常了。如下面的代碼。
email.setTLS(true);
", "sdzzczqqyyxy");
");
"); //我方
email.setSubject("Java發送郵件測試"); //标題
email.setCharset("GB2312"); //設定Charset
email.setMsg("這是一封Java程式發出的測試郵件。"); //内容
}
怎麼樣?簡單吧~~~
有人這時說到了網頁郵件,其實隻需要把上面SimpleEmail換成HtmlEmail,然後設定郵件内容的方法由setMsg(String str)變為setHtmlMsg(String str)就可以了,這樣就可以再郵件裡使用<br/>等html标簽來控制郵件的格式了.
還有人問,那麼附件呢?别急,我們馬上就來做個帶附件發送的代碼
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
publicclass AttachmentMailTest {
publicstaticvoid main(String[] args) throws EmailException, MalformedURLException {
// 建立一個Email附件
EmailAttachment emailattachment = new EmailAttachment();
emailattachment.setPath("/biao_05.jpg");
// emailattachment.setURL(new URL("
http://www.blogjava.net/bulktree/picture/bulktree.jpg"));
emailattachment.setDisposition(EmailAttachment.ATTACHMENT);
emailattachment.setDescription("This is Smile picture");
emailattachment.setName("bulktree");
// 建立一個email
MultiPartEmail multipartemail = new MultiPartEmail();
multipartemail.setHostName("smtp.163.com");
multipartemail.addTo("
[email protected]", "bulktree");
multipartemail.setFrom("
[email protected]multipartemail.setAuthentication("bulktree", "123456");
multipartemail.setSubject("This is a attachment Email");
multipartemail.setMsg("this a attachment Eamil Test");
//添加附件
multipartemail.attach(emailattachment);
//發送郵件
multipartemail.send();
System.out.println("The attachmentEmail send sucessful!!!");
}
就這樣,附件也發送成功了,大家可以試一下,另外這個項目是開源的,大家可以取下載下傳它的src來看看,我暫時就說到這兒..
不過用這個commons-email-1.1.jar實作發郵件還是有2個值得注意的地方:
1.前面提到mail.jar和activation.jar包的問題,這兩個包需要額外下載下傳并且必不可少的兩個包
2.不知是否是我使用錯誤或者軟體環境導緻,我在第一次使用時,出現了一個奇怪的異常:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
在網上有人說是因為JavaEE版本和JavaMail的版本不一緻導緻的.我用的是jdk1.6.查了半天,沒找到是哪裡沖突了,于是我建web項目時,選擇1.4版本,于是沒有出現任何問題,可以正常使用,估計應該是myeclipse建項目時自帶的jar包引起了這個問題.我用的是myeclipse 6.0.不知道在eclipse或其他版本的myeclipse上是否會出現這個問題,如果有知道緣由的朋友,請多指教.