所需要引入的包:commons-email-1.2.jar(apache官网下载),mail.jar(sun官网下载),activation.jar(sun官网下载,如果你使用的jdk是1.6以上,这个包就可以不下载了,因为jdk1.6已经包括了)
直接上代码吧。
PropertiesUtils类:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
*@author liudonggan Email:ldg123456@sina.com
*@date 2011-7-20 上午11:29:14
*@version v1.0
**/
public class PropertiesUtils {
private static InputStream inputStream=null;
public static String getProperties(String propertyName) throws Exception
{
String _propertyName="";
inputStream=PropertiesUtils.class.getClassLoader().getResourceAsStream("config.properties");
Properties p = new Properties();
try {
p.load(inputStream);
} catch (IOException e1) {
inputStream.close();
}
_propertyName=p.get(propertyName).toString();
inputStream.close();
return _propertyName;
}
}
MailUtils类:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;
import com.ys.product.bean.UserEmail;
/**
*@author liudonggan Email:ldg123456@sina.com
*@date 2011-7-20 上午10:49:41
*@version v1.0
**/
public class MailUtils {
/**
* sendMail 方法
* <p>方法说明:</p>
* @param path附件路迳
* @param subject邮件主题
* @param msg邮件内容
* @throws Exception
* @return void
* @author liudonggan Email:ldg123456@sina.com
* @date 2011-7-20 上午11:39:37
*/
public void sendMail(String path,List<UserEmail> emails,String subject,String msg) throws Exception
{
MultiPartEmail email = new MultiPartEmail();
//SimpleEmail email = new SimpleEmail();
// 设置邮件编码
email.setCharset("UTF-8");
// 设置邮件服务器
email.setHostName(PropertiesUtils.getProperties("mail.smtp"));
// 设置登录邮件服务器用户名和密码
email.setAuthentication(PropertiesUtils.getProperties("mail.email"), PropertiesUtils.getProperties("mail.pwd"));
// 添加收件人
for(UserEmail _email:emails)
{
email.addTo(_email.getEmailName(), _email.getTitle());
}
// 设置发件人
email.setFrom(PropertiesUtils.getProperties("mail.email"), "liudonggan");
// 设置邮件标题
email.setSubject(subject);
// 设置邮件正文内容
email.setMsg(msg);
// 要发送的附件
EmailAttachment attachment = new EmailAttachment();
File file = new File(path);
attachment.setPath(file.getPath());
attachment.setName(file.getName());
// 设置附件描述
attachment.setDescription(subject);
// 设置附件类型
attachment.setDisposition(EmailAttachment.ATTACHMENT);
// 添加附件
email.attach(attachment);
// 发送邮件
email.send();
}
public static void main(String[] arg) throws Exception
{
MailUtils mail=new MailUtils();
UserEmail _email=new UserEmail();
_email.setEmailName("20493351@qq.com");
_email.setTitle("XX标题");
List<UserEmail> emails=new ArrayList<UserEmail>();
emails.add(_email);
mail.sendMail("c:\\test.pdf",emails,"XX标题","内容");
}
}
总结:
发送简单邮件
下面这段代码是发送一个简单邮件的流程代码,你可以将其封装成一个方法,供调用。
SimpleEmail email =
new
SimpleEmail();
email.setHostName(
"mail.myserver.com"
);
//指定SMTP server
email.addTo(
"jdoe@somewhere.org"
,
"John Doe"
);
//指定接收方地址与名字
email.setFrom(
"me@apache.org"
,
"Me"
);
//指定发送方地址与名字
email.setSubject(
"Test message"
);
//指定邮件标题
email.setMsg(
"This is a simple test of commons-email"
);
//指定邮件内容
email.send();
//发送
注意,文件内容为中文,会出现乱码,解决方法如下:
将
email.setMsg(
"This is a simple test of commons-email"
);
替换为
email.setContent(
"This is a simple test of commons-email"
,
"text/plain;charset=GBK"
);
3
.发送带附件的邮件
下面这段代码是发送一个带附件邮件的流程代码,你可以将其封装成一个方法,供调用。
// Create the attachment
EmailAttachment attachment =
new
EmailAttachment();
attachment.setPath(
"mypictures/john.jpg"
);
//指定附件在本地的路径
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(
"Picture of John"
);
//附件描述
attachment.setName(
"John"
);
//附件名称
// Create the email message
MultiPartEmail email =
new
MultiPartEmail();
email.setHostName(
"mail.myserver.com"
);
email.addTo(
"jdoe@somewhere.org"
,
"John Doe"
);
email.setFrom(
"me@apache.org"
,
"Me"
);
email.setSubject(
"The picture"
);
email.setMsg(
"Here is the picture you wanted"
);
// add the attachment
email.attach(attachment);
// send the email
email.send();
同样,你可以指定一个在网络上的附件,只要给出该附件的地址,将上文绿色代码部分替换为下面这句。
注意,如果你的附件的名称是中文时,同样会出现乱码,解决的方法如下。
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(
"Picture of John"
);
//附件描述
attachment.setName(
"需传送的附件"
);
//附件名称
attachment.setName(MimeUtility.encodeText(
"需传送的附件.txt"
));
4
.示例代码
下面给出了一个SendMail.java,将上述方法封装成一个
class
。
其中,构造子初始化所有最基本的变量,即发送简单邮件时所使用的变量,看变量名称即可“望文生义”。
public
SendMail(String hostSMTP, String toMailAddress, String toMailUser,
String fromMailAddress, String fromMailUser, String mailSubject,
String mailMessage) {
方法send()可发送一个简单邮件。
方法sendAttchment (String path,String des,String name)可发送一个带附件的邮件。其中,path指定附件在本地的物理路径,des指定附件的描述,name指定附件名。
方法sendAttachmentWithUrl (URL url,String des,String name)可发送一个指定附件URL的邮件。其中,url指定附件的URL,其余参数和sendAttachment相同含义。
发送附件的这两个方法没有考虑处理中文文件名的问题,大家可自己添加。
import java.net.URL;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;
public class SendMail {
private String hostSMTP;
private String toMailAddress;
private String toMailUser;
private String fromMailAddress;
private String fromMailUser;
private String mailSubject;
private String mailMessage;
private String attachmentPath;
private String attachmentDescription;
private String attachmentName;
private URL attachmentUrl;
public SendMail(String hostSMTP, String toMailAddress, String toMailUser,
String fromMailAddress, String fromMailUser, String mailSubject,
String mailMessage) {
this.hostSMTP = hostSMTP;
this.toMailAddress = toMailAddress;
this.toMailUser = toMailUser;
this.fromMailAddress = fromMailAddress;
this.fromMailUser = fromMailUser;
this.mailSubject = mailSubject;
this.mailMessage = mailMessage;
}
public String send() {
SimpleEmail email = new SimpleEmail();
try {
email.setHostName(hostSMTP);
email.addTo(toMailAddress, toMailUser);
email.setFrom(fromMailAddress, fromMailUser);
email.setSubject(mailSubject);
//email.setMsg(mailMessage);//如果是中文会产生乱码,由下句解决
email.setContent(mailMessage, "text/plain;charset=GBK");//避免中文乱码
email.send();
return ("mail send.");
} catch (EmailException e) {
return (e.getMessage());
}
}
/**
*
* @param path Your attachment local path.
* @param des Your attachment description.
* @param name Your attachment name.
* @return mail send or failed.
*/
public String sendAttchment(String path,String des,String name){
attachmentPath = path;
attachmentDescription = des;
attachmentName = name;
EmailAttachment attachment = new EmailAttachment();
attachment.setPath(attachmentPath);
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(attachmentDescription);
attachment.setName(attachmentName);
MultiPartEmail email = new MultiPartEmail();
try {
email.setHostName(hostSMTP);
email.addTo(toMailAddress, toMailUser);
email.setFrom(fromMailAddress, fromMailUser);
email.setSubject(mailSubject);
email.setMsg(mailMessage);
// add the attachment
email.attach(attachment);
// send the email
email.send();
return ("mail send.");
} catch (EmailException e) {
return (e.getMessage());
}
}
/**
* @param url Your attachment URL path.
* @param des Your attachment description.
* @param name Your attachment name.
* @return mail send or failed.
*/
public String sendAttachmentWithUrl(URL url,String des,String name){
attachmentUrl=url;
attachmentDescription = des;
attachmentName = name;
EmailAttachment attachment = new EmailAttachment();
attachment.setURL(attachmentUrl);//such as ("http://www.apache.org/images/asf_logo_wide.gif")
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription(attachmentDescription);
attachment.setName(attachmentName);
MultiPartEmail email = new MultiPartEmail();
try {
email.setHostName(hostSMTP);
email.addTo(toMailAddress, toMailUser);
email.setFrom(fromMailAddress, fromMailUser);
email.setSubject(mailSubject);
email.setMsg(mailMessage);
// add the attachment
email.attach(attachment);
//send the email
email.send();
return ("mail send.");
}catch (EmailException e) {
return (e.getMessage());
}
}
/**
* The main class for test
*/
public static void main(String[] args) {
SendMail sendMail = new SendMail("www.zj-email.com",
"Gu@zj-email.com", "Gu", "me@zj.org",
"Michael", "来自zj",
"测试中文");
System.out.println(sendMail.send());
}
public String getFromMailAddress() {
return fromMailAddress;
}
public void setFromMailAddress(String fromMailAddress) {
this.fromMailAddress = fromMailAddress;
}
public String getFromMailUser() {
return fromMailUser;
}
public void setFromMailUser(String fromMailUser) {
this.fromMailUser = fromMailUser;
}
public String getHostSMTP() {
return hostSMTP;
}
public void setHostSMTP(String hostSMTP) {
this.hostSMTP = hostSMTP;
}
public String getMailMessaage() {
return mailMessage;
}
public void setMailMessaage(String mailMessaage) {
this.mailMessage = mailMessaage;
}
public String getMailSubject() {
return mailSubject;
}
public void setMailSubject(String mailSubject) {
this.mailSubject = mailSubject;
}
public String getToMailAddress() {
return toMailAddress;
}
public void setToMailAddress(String toMailAddress) {
this.toMailAddress = toMailAddress;
}
public String getToMailUser() {
return toMailUser;
}
public void setToMailUser(String toMailUser) {
this.toMailUser = toMailUser;
}
public String getAttachmentDescription() {
return attachmentDescription;
}
public void setAttachmentDescription(String attachmentDescription) {
this.attachmentDescription = attachmentDescription;
}
public String getAttachmentName() {
return attachmentName;
}
public void setAttachmentName(String attachmentName) {
this.attachmentName = attachmentName;
}
public String getAttachmentPath() {
return attachmentPath;
}
public void setAttachmentPath(String attachmentPath) {
this.attachmentPath = attachmentPath;
}
public URL getAttachmentUrl() {
return attachmentUrl;
}
public void setAttachmentUrl(URL attachmentUrl) {
this.attachmentUrl = attachmentUrl;
}
}
5
.参考资料
[
1
]Apache-commons-emai guide, http:
//jakarta.apache.org/commons/email/userguide.html
[
2
] javamail 一些资源,http:
//www.360doc.com/showWeb/0/0/18285.aspx