一、
public class MailVO {
private String from;
private String to;
private String subject;
private String data;
private List<ImageDataSourceVO> imagesDS;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<ImageDataSourceVO> getImagesDS() {
return imagesDS;
}
public void setImagesDS(List<ImageDataSourceVO> imagesDS) {
this.imagesDS = imagesDS;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
二、
MailVO mail=new MailVO();
mail.setFrom(bill.getDefaultCorpUserMail());
mail.setTo(billUser.getEmail());
mail.setSubject(bill.getDefaultSubject());
mail.setData(msg);
mail.setName(bill.getDefaultCorpUserName());
//add
String webPath=this.getClass().getClassLoader().getResource("/").getPath();
mail.setImagesDS((LoadImage.getBillImageDS(webPath)));
boolean bol=send.sendMail(mail,bill);
三、
public class LoadImage {
private final static Log log = AdminLogger.getInstance();
static List<String> billImages = new ArrayList<String>();
static List<ImageDataSourceVO> billImageDS = new ArrayList<ImageDataSourceVO>();
public static List<ImageDataSourceVO> getBillImageDS(String webPath)
{
if(billImageDS.size()>0)
{
return billImageDS;
}
String imagePath=webPath.substring(0,webPath.indexOf("WEB-INF"))+"static/images/bill";
log.info("imagePath=="+imagePath);
List<String> images=readImages(imagePath);
for(int i=0;i<images.size();i++)
{
ImageDataSourceVO imageDs=new ImageDataSourceVO();
DataSource fds=new FileDataSource(imagePath+"/"+images.get(i));
try {
log.info("contentID======="+images.get(i));
imageDs.setFds(new DataHandler(fds));
imageDs.setContentID(images.get(i));
billImageDS.add(imageDs);
} catch (Exception e) {
log.error("load bill getBillImageDS is error:" + e.getMessage());
}
}
return billImageDS;
}
public static List<String> readImages(String filepath) {
List<String> images = new ArrayList<String>();
try {
File file = new File(filepath);
if (!file.isDirectory()) {
boolean bol = HelperUtil.isImage(new File(filepath + "/"
+ file.getName()));
if (bol) {
images.add(file.getName());
}
} else if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(filepath + "/" + filelist[i]);
if (!readfile.isDirectory()) {
boolean bol = HelperUtil.isImage(new File(filepath
+ "/" + readfile.getName()));
if (bol) {
images.add(readfile.getName());
}
} else if (readfile.isDirectory()) {
readImages(filepath + "/" + filelist[i]);
}
}
}
} catch (Exception e) {
log.error("load bill image is error:" + e.getMessage());
}
return images;
}
}
四、
public boolean sendMail(MailVO mail,BillVO bill) {
MimeMessage message=getMimeMessage(bill);
try {
if(null==mail.getFrom() || "".equals(mail.getFrom()))
{
return false;
}
if(null !=mail.getName() && !"".equals(mail.getName()))
{
message.setFrom(new InternetAddress(mail.getFrom(),HelperUtil.filterSmbol(mail.getName())));
}
else
{
message.setFrom(new InternetAddress(mail.getFrom()));
}
message.setRecipient(Message.RecipientType.TO, new InternetAddress(mail.getTo()));
message.setSentDate(new Date());
message.setSubject(mail.getSubject(), "UTF-8");
MimeBodyPart contentPart=createContent(mail.getData(),mail.getImagesDS());
MimeMultipart multipart=new MimeMultipart("mixed");
multipart.addBodyPart(contentPart);
message.setContent(multipart,"text/plain;charset=UTF-8");
message.saveChanges();
Transport.send(message);
log.info("send bill "+ mail.getTo()+" is ok");
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("send bill "+ mail.getTo()+" is error",e);
return false;
}
}
五、
public MimeMessage getMimeMessage(BillVO bill)
{
String smtp=PropertiesUtil.getProperty("plugs.register.sendmail.smtp", "smtp.163.com");
String port=PropertiesUtil.getProperty("plugs.register.sendmail.smtp.port", "25");
Properties props = new Properties();
//不是接受邮件服务器需要验证
props.setProperty("mail.smtp.auth", "true");
//添加传输协议
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", smtp);//登录发送邮件服务器
props.setProperty("mail.smtp.port", port);//登录发送邮件服务器
log.info("cmd=BillMailTimer:run |msg defaultCropUserMail="+bill.getDefaultCorpUserMail());
MyAuthenticator authenticator=new MyAuthenticator(bill.getDefaultCorpUserMail(), bill.getDefaultCorpUserPwd());
Session session = Session.getInstance(props,authenticator);
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
return message;
}
六
public boolean sendMail(MailVO mail,BillVO bill) {
MimeMessage message=getMimeMessage(bill);
try {
if(null==mail.getFrom() || "".equals(mail.getFrom()))
{
return false;
}
if(null !=mail.getName() && !"".equals(mail.getName()))
{
message.setFrom(new InternetAddress(mail.getFrom(),HelperUtil.filterSmbol(mail.getName())));
}
else
{
message.setFrom(new InternetAddress(mail.getFrom()));
}
message.setRecipient(Message.RecipientType.TO, new InternetAddress(mail.getTo()));
message.setSentDate(new Date());
message.setSubject(mail.getSubject(), "UTF-8");
MimeBodyPart contentPart=createContent(mail.getData(),mail.getImagesDS());
MimeMultipart multipart=new MimeMultipart("mixed");
multipart.addBodyPart(contentPart);
message.setContent(multipart,"text/plain;charset=UTF-8");
message.saveChanges();
Transport.send(message);
log.info("send bill "+ mail.getTo()+" is ok");
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
log.error("send bill "+ mail.getTo()+" is error",e);
return false;
}
}
七、
private MimeBodyPart createContent(String data, List<ImageDataSourceVO> imageDS) {
// TODO Auto-generated method stub
MimeBodyPart contentPart=new MimeBodyPart();
MimeMultipart contentmultipart=new MimeMultipart("related");
MimeBodyPart htmlBodyPart=new MimeBodyPart();
try {
htmlBodyPart.setContent(data, "text/html;charset=UTF-8");
contentmultipart.addBodyPart(htmlBodyPart);
} catch (MessagingException e1) {
// TODO Auto-generated catch block
log.error("contentmultipart.addBodyPart",e1);
}
if(null!=imageDS)
{
for(int i=0;i<imageDS.size();i++)
{
ImageDataSourceVO ds=imageDS.get(i);
MimeBodyPart gifBodyPart=new MimeBodyPart();
try {
//log.info("ContentID()="+ds.getContentID());
gifBodyPart.setDataHandler(ds.getFds());
gifBodyPart.setContentID(ds.getContentID());
contentmultipart.addBodyPart(gifBodyPart);
} catch (MessagingException e) {
// TODO Auto-generated catch block
log.error("gifBodyPart.setContentID",e);
}
}
}
try {
contentPart.setContent(contentmultipart);
} catch (MessagingException e) {
// TODO Auto-generated catch block
log.error("contentPart.setContent",e);
}
return contentPart;
}
八
public class MyAuthenticator extends Authenticator {
String userName=null;
String password=null;
public MyAuthenticator(){
}
public MyAuthenticator(String username, String password) {
this.userName = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(userName, password);
}
}