利用java发邮件

来源:互联网 时间:1970-01-01

网站发送邮件是一个常用功能,现在有相当一部分网站用户注册都需要通过Email验证合法性,而用javamail比较繁琐,apache又做了一件好事:在javamail的基础上封装java发送邮件业务,让用户可以通过简单的调用几个方法就可以实现邮件发送与接收。

首先,这篇文章的测试环境是:jdk 1.6+MyEclipse 5.5.1 GA+javamail 1.4(在控制台测试的,所以没用到应用服务器)。 然后在apache官网上下载Commons Email,下面是几个用Commons Email发邮件的方法。


package com.zhutou.email;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.HtmlEmail;import org.apache.commons.mail.MultiPartEmail;import org.apache.commons.mail.SimpleEmail;/*** 用apache的Commons Email发送邮件** @author www.5ipig.com/blog*/public class JavaMail { /** * 用apache的Commons Email发送不含附件的邮件 * * @return 发送结果,是否发送成功 */ public String sendSingleMail() { String resultmsg = "发信失败!"; SimpleEmail email = new SimpleEmail(); email.setHostName("smtp.163.com"); try { email.addTo("[email protected]", "ajonjun"); email.setFrom("[email protected]", "ajonjun"); // 请修改成你的邮箱账号和密码。 email.setAuthentication("username", "password"); email.setSubject("发信测试标题"); email.setMsg("This is a simple test of commons-email"); resultmsg = email.send(); if (resultmsg != null) { resultmsg = "发送成功!"; } } catch (EmailException e) { e.printStackTrace(); } return resultmsg; } /** * 发送单个带附件的邮件 * * @return 发送结果,是否发送成功 */ public String sendAttachmentsMail() { String resultmsg = "发信失败!"; // 创建一个附件对象 EmailAttachment attachment = new EmailAttachment(); // 设置附件的地址,可以是本机地址(包括绝对地址和相对地址), //也可以是internet地址,如:http://www.5ipig.com/blog/attachment.php?fid=2 attachment.setPath("E://1.jpg"); attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription("Picture of gaylys"); attachment.setName("gaylys"); // 创建多文本邮件对象 MultiPartEmail email = new MultiPartEmail(); email.setHostName("smtp.163.com"); try { email.addTo("[email protected]", "ajonjun"); email.setFrom("[email protected]", "ajonjun"); // 请修改成你的邮箱账号和密码。 email.setAuthentication("username", "password"); email.setSubject("带附件的邮件"); email.setMsg("Here is the picture you wanted"); // 将附件添加到邮件 email.attach(attachment); // 发送邮件 resultmsg = email.send(); if (resultmsg != null && !"".equals(resultmsg)) { resultmsg = "发送成功!"; } } catch (EmailException e) { e.printStackTrace(); } return resultmsg; } /** * 发送html邮件 * * @return 发送结果,是否发送成功 */ public String sendHtmlEmail() { String resultmsg = "发信失败!"; // 创建邮件对象 HtmlEmail email = new HtmlEmail(); email.setHostName("smtp.163.com"); try { email.addTo("[email protected]", "ajonjun"); email.setFrom("[email protected]", "ajonjun"); // 请修改成你的邮箱账号和密码。 email.setAuthentication("username", "password"); email.setSubject("发送html邮件的测试"); // 嵌入附件地址 URL url = new URL( "http://www.5ipig.com/blog/attachment.php?fid=2"); String cid = email.embed(url, "3D桌面"); // 设置编码格式,不设置会出现中文乱码。 email.setCharset("GB2312"); // 写入html代码 email.setHtmlMsg("3D桌面 - <img src="/" alt="" />"); // 设置替代文字 email .setTextMsg("Your email client does not support HTML messages"); // 发送邮件 resultmsg = email.send(); if (resultmsg != null && !"".equals(resultmsg)) { resultmsg = "发送成功!"; } } catch (EmailException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } return resultmsg; } public static void main(String args[]) { JavaMail mail = new JavaMail(); System.out.println(mail.sendHtmlEmail()); }}


java发送邮件的基本方法也就这些,当然还有群发,我看了下,Commons Email好像没提供群发的功能,不过如果你有这个需要可以自己写一个:收信人是多个,用”,”分隔,根据收信人数循环发送邮件,也就是多次调用发邮件的方法。
如果你是按照以上步骤写的代码,却不能发送邮件,看看是不是下面的错误:
Exception in thread “main” java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream或者javax.mail.NoSuchProviderException: smtp

解决方案: JavaEE版本和JavaMail的版本不一致,请将sun公司上下载最新版本.如果还报这个错,找到myeclipse环境中的javaee.jar 包,用winrar或者其他解压缩工具打开,删除mail跟activation包,因为javaee.jar中的mail与javamail冲突。

没问题了。



相关阅读:
Top