下面代码只要稍微修改几个地方就能直接使用, 亲们自取。 Tips: 不要用QQ邮箱发送
JavaEmailTest :
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.util.Date;
import java.util.Properties;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
*
* @ClassName: JavaEmailTest
* @Description: 发送邮件
* @author wenniuwuren
* @date 2014-12-25 下午3:37:27
*
*/
public class JavaEmailTest implements Serializable {
private static final long serialVersionUID = -1;
private static JavaEmailTest bean = new JavaEmailTest();
// 发件人信息:帐号、密码、发件所用SMTP服务器(请到相关邮箱开启SMTP支持)
private String fromEmailAccount = "email@163.com";// 发件人账号
private String fromEmailPassword = "123456";// 发件人密码
private Long affixFileSize = 1048576L * 10l;// 允许发送的最大附件大小(字节)
private String emailServerIP = "smtp.163.com";// 服务器的IP或域名
public static JavaEmailTest getBean(){
return bean;
}
/**
* @see 发邮件
* @param toEmail 收件人地址
* @param title 邮件标题
* @param templetPath 模板路径(物理路径)
* @param args 模板中需要替换的值
* @param affixPath 附件的路径(物理路径)
* @return boolean
* */
public Boolean sendEmail(String toEmail, String title, String templetPath,
String []args, String affixPath) {
Boolean result = false;
try {
Properties properties = new Properties();
Session session = Session.getInstance(properties, null);
properties.put("mail.smtp.host", emailServerIP);
properties.put("mail.smtp.auth", "true");// smtp校验
Transport transport = session.getTransport("smtp");
transport.connect(emailServerIP, fromEmailAccount, fromEmailPassword);
Message message = new MimeMessage(session);
message.setSubject(title);// 邮件主题
Address address[] = { new InternetAddress(fromEmailAccount) };
message.addFrom(address);
message.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));// 收件人地址
message.setSentDate(new Date());// 发送时间
//start mail正文
String content = readTemplet(templetPath);// 读取邮件模板的内容
for (int i = 0; i < args.length; i++) {
content = content.replace("{" + i + "}", args[i]);// 替换模板中的占位符
}
MimeMultipart multipart = new MimeMultipart();
MimeBodyPart contentPart = new MimeBodyPart();
contentPart.setDataHandler(new DataHandler(content, "text/html;charset=gbk"));// 正文内容
multipart.addBodyPart(contentPart);// 正文
if (null != affixPath && !"".equals(affixPath)) {
File file = new File(affixPath);
if (file.exists() && !file.isDirectory() && file.length() <= affixFileSize) {// 附件存在且小于10M
MimeBodyPart affixPart = new MimeBodyPart();
affixPart.setDataHandler(new DataHandler(new FileDataSource(affixPath)));// 读取附件
affixPart.setFileName(MimeUtility.encodeText(file.getName()));//设置附件标题
multipart.addBodyPart(affixPart);// 设置附件
}
}
message.setContent(multipart);
//end mail正文
message.saveChanges();// 保存发送信息
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));// 发送邮件
transport.close();
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
// 读模板文件
private String readTemplet(String templetPath) throws IOException {
InputStream input = null;
InputStreamReader read = null;
BufferedReader reader = null;
if (!new File(templetPath).exists()) {
return "";
}
try {
input = new FileInputStream(templetPath);
read = new InputStreamReader(input, "UTF-8");
reader = new BufferedReader(read);
String line;
String result = "";
while ((line = reader.readLine()) != null) {
result += line + "\n";
}
return result.substring(result.indexOf("<html>"));
} catch (Exception e) {
e.printStackTrace();
return "";
} finally {
reader.close();
read.close();
input.close();
}
}
// 异步执行
private Boolean asynchronizedExecutor(final String toEmail, final String title, final String templetPath,
final String[] emailModel) {
Boolean flag = Boolean.FALSE;
FutureTask<Boolean> futureTask = null;
ExecutorService excutorService = Executors.newCachedThreadPool();
// 执行任务
futureTask = new FutureTask<Boolean>(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
return bean.sendEmail(toEmail, title, templetPath, emailModel, templetPath);// 发送邮件;
}
});
excutorService.submit(futureTask);
try {
// 任务没超时说明发送成功
flag = futureTask.get(5L, TimeUnit.SECONDS);
} catch (InterruptedException e) {
futureTask.cancel(true);
e.printStackTrace();
} catch (ExecutionException e) {
futureTask.cancel(true);
e.printStackTrace();
} catch (TimeoutException e) {
futureTask.cancel(true);
e.printStackTrace();
} finally {
excutorService.shutdown();
}
return flag;
}
public static void main(String[] args) {
try {
final String email = "email1@qq.com;email2@qq.com";// 收件人地址(用;隔开可以发多人邮件)
final String title = "圣诞快乐";// 邮件标题
final String url = "https://www.google.com";
final String img = "http://www.0756jy.cn/uploads/allimg/101210/6_101210102543_1.jpg"; // 图片地址
final String templetPath = "E:\\你的具体放置地址\\MerryChrismas.txt"; // 邮件正文文档兼附件
final String[] toEmails = email.split(";");
for (int i = 0; i < toEmails.length; i++) {
String[] emailModel = new String[]{ "文牛武人", "wenniuwuren", toEmails[i], url, url, url, img};// 邮件模板的参数设置
System.out.println("发送状态:" + bean.asynchronizedExecutor(toEmails[i], title, templetPath, emailModel));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>圣诞快乐</title>
</head>
<body>
尊敬的 {0}:<br/>
您好!<br/>
您的账户出现了异常<br/>
您的用户名是:{1}<br/>
您的邮箱地址是:{2}<br/>
请<a href="{3}">点击</a>或复制这个网址去重新设置您的密码(24小时之内有效):<br/>
<a href="{4}">{5}</a><br/>
祝好!<br/>
wenniuwuren<br/>
<img src="{6}" border="0"/><br/>
</body>
</html>
所依赖的Jar包: mail-1.4.7.jar