package util;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
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;
import org.apache.log4j.Logger;
import config.Configuration;
public class SendEmail extends Configuration {
// 邮件发送协议
private static String PROTOCOL;
// SMTP邮件服务器
private static String HOST;
// 是否要求身份认证
private static String IS_AUTH;
// SMTP邮件服务器默认端口
private static String PORT;
// 发件人
private static String from;
private static String fromname;
private static String username;
private static String password;
private static String title;
private static String path;
private static String content;
private static Logger logger = Logger.getLogger(SendEmail.class);
static {
logger.info("Configuration Init!");
try {
Properties conf = Resources.getResourceAsProperties(confname);
PROTOCOL = conf.getProperty("PROTOCOL");
HOST = conf.getProperty("HOST");
IS_AUTH = conf.getProperty("IS_AUTH");
PORT = conf.getProperty("PORT");
from = conf.getProperty("from");
fromname = conf.getProperty("fromname");
username = conf.getProperty("username");
password = conf.getProperty("password");
path = conf.getProperty("excelpath");
title = conf.getProperty("title");
content = conf.getProperty("content");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String filename="e:/cdnfile/analysis/sourcedata/20180927/info1527";
try {
//sendMail(filename);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static boolean sendMail(List<String> filename,String toemail,int cid){
boolean flag = true;
// 创建一个连接属性。
Properties props = new Properties();//
props.put("mail.smtp.host ", HOST);// 设置smtp的服务器地址是smtp.126.com
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.auth", IS_AUTH);// 设置smtp服务器要身份验证。
props.put("mail.transport.protocol", PROTOCOL);
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
Message message = new MimeMessage(session);
try {
InternetAddress froms = new InternetAddress(from);
froms.setPersonal(MimeUtility.encodeText(fromname)); // 发件人名
message.setFrom(froms);
InternetAddress to = new InternetAddress(toemail);
// //收件人地址
// 创建邮件体:
message.setRecipient(Message.RecipientType.TO, to); // 只有抄送给自己的邮箱
message.setSubject(MimeUtility.encodeText(title)); // 邮件标题
message.setSentDate(new Date());
MimeMultipart msgMultipart = new MimeMultipart("mixed");// 指定为混合关系
message.setContent(msgMultipart);
// 邮件内容
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(
"<body>"
+ "<div style='position: absolute; left: 390px; top: 150px;height: "
+ "100px;width: 200px;' align='center'>"
+ "<font color='red'>"+content+"</font>"
+ "</div></body>",
"text/html;charset=UTF-8");
// TODO 组装的顺序非常重要,一定要先组装文本域,再组装文件
msgMultipart.addBodyPart(htmlPart);
// 组装附件
MimeBodyPart file;
DataHandler dh;
DataSource file_datasource;
String str = TimeUtil.getYearAndMonth();
String filepath = path+"/"+ cid +"/"+str+"/"+new SimpleDateFormat("yyyyMMdd").format(new Date());
for (int i = 0; i < filename.size(); i++) {
System.out.println(filename.get(i));
file = new MimeBodyPart();
String name = filepath+"/"+filename.get(i)+".xls";
//name = filepath+"/客户资源获取量月报.xls";
System.out.println(name);
file_datasource = new FileDataSource(new File(name));
dh = new DataHandler(file_datasource);
file.setDataHandler(dh);
// 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
file.setFileName(MimeUtility.encodeText(dh.getName()));
msgMultipart.addBodyPart(file);
}
message.saveChanges();
// 发送邮件的过程:
Transport transport = session.getTransport(PROTOCOL); // 创建连接
transport.connect(HOST, Integer.valueOf(PORT), username, password); // 连接服务器
// 服务名,端口,发送邮件用户名
// (不要@后面),密码
transport.sendMessage(message, message.getAllRecipients()); // 发送信息
transport.close(); // 关闭
logger.info("发送完毕");
} catch (Exception e) {
logger.error("sendMail: ", e);
flag = false;
logger.info("EmailService:发送失败 公司id:"+ cid +" 报表名称: "+ filename.toString()+" email:"+toemail);
}
return flag;
}
}