项目需要用java实现自动发邮件,包含邮件标题,正文和附件,

网上搜索了一下拿到的实例都无法满足需求,为了方便以后查阅也方便他人查阅记录如下


实例如下:

1.如果遇到 class not found问题请删除 myeclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5\javaee.jar
2.可能有人会遇到设置附件后邮件正文就没有了,为此你需要单独new 一个 object,
 //content part
             BodyPart messageContentBodyPart = new MimeBodyPart();
             messageContentBodyPart.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
             multipart.addBodyPart(messageContentBodyPart);
-------------------------------------------

package com.jeecms.common.mail;


 import java.io.File;


 public class MailSenderHelper {
     /**
      * Send a mail with a attachment
      * @param attachFileFullName
      * @param receiver
      * @param mailTiltle
      * @param mailBody
      */
     public static void sendMailWithAttachment(String attachFileFullName, String receiver, String mailTiltle, String mailBody) {
         MailSenderInfo mailInfo = new MailSenderInfo();
         mailInfo.setMailServerHost("smtp.xxx");
         mailInfo.setMailServerPort("25");
         mailInfo.setValidate(true);
         mailInfo.setUserName("");
         mailInfo.setPassword("");// 您的邮箱密码
         mailInfo.setFromAddress("");//您的邮箱地址
         mailInfo.setToAddress(receiver);
         mailInfo.setSubject(mailTiltle);
         mailInfo.setContent(mailBody);
         // 这个类主要来发送邮件
         SimpleMailSender mail = new SimpleMailSender();
         mail.sendTextMail(mailInfo, attachFileFullName);// 发送文体格式
     }
     
     /**
      * Send a mail with a attachment
      * @param attachFile
      * @param receiver
      * @param mailTiltle
      * @param mailBody
      */
     public static void sendMailWithAttachment(File attachFile, String receiver, String mailTiltle, String mailBody) {
         MailSenderInfo mailInfo = new MailSenderInfo();
         mailInfo.setMailServerHost("smtp.xx");
         mailInfo.setMailServerPort("25");
         mailInfo.setValidate(true);
         mailInfo.setUserName("");
         mailInfo.setPassword("");// 您的邮箱密码
         mailInfo.setFromAddress("");//您的邮箱地址
         mailInfo.setToAddress(receiver);
         mailInfo.setSubject(mailTiltle);
         mailInfo.setContent(mailBody);
         // 这个类主要来发送邮件
         SimpleMailSender mail = new SimpleMailSender();
         mail.sendTextMail(mailInfo, attachFile);// 发送文体格式
     }
     
     /**
      * Send a mail without attachment
      * @param receiver
      * @param mailTiltle
      * @param mailBody
      */
     public static void sendMail(String receiver, String mailTiltle, String mailBody) {
         MailSenderInfo mailInfo = new MailSenderInfo();
         mailInfo.setMailServerHost("smtp.xxx");
         mailInfo.setMailServerPort("25");
         mailInfo.setValidate(true);
         mailInfo.setUserName("");
         mailInfo.setPassword("");// 您的邮箱密码
         mailInfo.setFromAddress("");//您的邮箱地址
         mailInfo.setToAddress(receiver);
         mailInfo.setSubject(mailTiltle);
         mailInfo.setContent(mailBody);
         // 这个类主要来发送邮件
         SimpleMailSender mail = new SimpleMailSender();
         mail.sendTextMail(mailInfo);// 发送文体格式
     }
     
     public static void main(String []argv) {
         
         MailSenderHelper.sendMailWithAttachment(new File("E:\\free\\test.xlsx"), "xxx@qq.com",
                 "test", "Hi sir, <br>The report is ready");
         System.out.println("send mail done");
     }


 }



package com.jeecms.common.mail;


 import java.io.File;
 import java.util.Date;
 import java.util.Properties;


 import javax.activation.DataHandler;
 import javax.activation.DataSource;
 import javax.activation.FileDataSource;
 import javax.mail.Address;
 import javax.mail.BodyPart;
 import javax.mail.Message;
 import javax.mail.MessagingException;
 import javax.mail.Multipart;
 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 org.springframework.mail.javamail.JavaMailSender;
 import org.springframework.mail.javamail.MimeMessageHelper;


 /**
  * 邮件发送类
  */
 public class SimpleMailSender {
     /**
      * 以文本格式发送邮件
      * 
      * @param mailInfo
      *            待发送的邮件的信息
      */
     public boolean sendTextMail(MailSenderInfo mailInfo) {
         // 判断是否需要身份认证
         MailAuthenticator authenticator = null;
         Properties pro = mailInfo.getProperties();
         if (mailInfo.isValidate()) {
             // 如果需要身份认证,则创建一个密码验证器
             authenticator = new MailAuthenticator(mailInfo.getUserName(),
                     mailInfo.getPassword());
         }
         // 根据邮件会话属性和密码验证器构造一个发送邮件的session
         Session sendMailSession = Session
                 .getDefaultInstance(pro, authenticator);
         try {
             // 根据session创建一个邮件消息
             Message mailMessage = new MimeMessage(sendMailSession);
             // 创建邮件发送者地址
             Address from = new InternetAddress(mailInfo.getFromAddress());
             // 设置邮件消息的发送者
             mailMessage.setFrom(from);
             // 创建邮件的接收者地址,并设置到邮件消息中
             Address to = new InternetAddress(mailInfo.getToAddress());
             mailMessage.setRecipient(Message.RecipientType.TO, to);
             // 设置邮件消息的主题
             mailMessage.setSubject(mailInfo.getSubject());
             // 设置邮件消息发送的时间
             mailMessage.setSentDate(new Date());
             // 设置邮件消息的主要内容
             String mailContent = mailInfo.getContent();
             mailMessage.setText(mailContent);
             // 发送邮件


             Transport.send(mailMessage);
             return true;
         } catch (MessagingException ex) {
             ex.printStackTrace();
         }
         return false;
     }
     
     /**
      * 以文本格式发送邮件
      * 
      * @param mailInfo
      *            待发送的邮件的信息
      */
     public boolean sendTextMail(MailSenderInfo mailInfo, String attachFileFullName) {
         // 判断是否需要身份认证
         MailAuthenticator authenticator = null;
         Properties pro = mailInfo.getProperties();
         if (mailInfo.isValidate()) {
             // 如果需要身份认证,则创建一个密码验证器
             authenticator = new MailAuthenticator(mailInfo.getUserName(),
                     mailInfo.getPassword());
         }
         // 根据邮件会话属性和密码验证器构造一个发送邮件的session
         Session sendMailSession = Session
                 .getDefaultInstance(pro, authenticator);
         try {
             // 根据session创建一个邮件消息
             Message mailMessage = new MimeMessage(sendMailSession);
             // 创建邮件发送者地址
             Address from = new InternetAddress(mailInfo.getFromAddress());
             // 设置邮件消息的发送者
             mailMessage.setFrom(from);
             // 创建邮件的接收者地址,并设置到邮件消息中
             Address to = new InternetAddress(mailInfo.getToAddress());
             mailMessage.setRecipient(Message.RecipientType.TO, to);
             // 设置邮件消息的主题
             mailMessage.setSubject(mailInfo.getSubject());
             // 设置邮件消息发送的时间
             mailMessage.setSentDate(new Date());
             // 设置邮件消息的主要内容
             String mailContent = mailInfo.getContent();
             mailMessage.setText(mailContent);
             // 发送邮件
            
             // 邮件内容
             Multipart multipart = new MimeMultipart();
             BodyPart messageBodyPart = new MimeBodyPart();
             DataSource source = new FileDataSource(attachFileFullName);
             messageBodyPart.setDataHandler(new DataHandler(source));
             // 附件中文显示编码
             sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
             String fileName = attachFileFullName;
             int index = 0;
             if(( index = fileName.lastIndexOf("\\")) != -1) {
                 fileName = attachFileFullName.substring(index + 1);
             }else if(( index = fileName.lastIndexOf("/")) != -1) {
                 fileName = attachFileFullName.substring(index + 1);
             }
             messageBodyPart.setFileName("=?UTF-8?B?"
                     + enc.encode(fileName.getBytes()) + "?=");
             //messageBodyPart.setText(mailInfo.getContent());
             multipart.addBodyPart(messageBodyPart);
             
             //content part
             BodyPart messageContentBodyPart = new MimeBodyPart();
             messageContentBodyPart.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
             multipart.addBodyPart(messageContentBodyPart);
             
             mailMessage.setContent(multipart);


             Transport.send(mailMessage);
             return true;
         } catch (MessagingException ex) {
             ex.printStackTrace();
         }
         return false;
     }
     
     /**
      * 以文本格式发送邮件
      * 
      * @param mailInfo
      *            待发送的邮件的信息
      */
     public boolean sendTextMail(MailSenderInfo mailInfo, File attachFile) {
         // 判断是否需要身份认证
         MailAuthenticator authenticator = null;
         Properties pro = mailInfo.getProperties();
         if (mailInfo.isValidate()) {
             // 如果需要身份认证,则创建一个密码验证器
             authenticator = new MailAuthenticator(mailInfo.getUserName(),
                     mailInfo.getPassword());
         }
         // 根据邮件会话属性和密码验证器构造一个发送邮件的session
         Session sendMailSession = Session
                 .getDefaultInstance(pro, authenticator);
         try {
             // 根据session创建一个邮件消息
             Message mailMessage = new MimeMessage(sendMailSession);
             // 创建邮件发送者地址
             Address from = new InternetAddress(mailInfo.getFromAddress());
             // 设置邮件消息的发送者
             mailMessage.setFrom(from);
             // 创建邮件的接收者地址,并设置到邮件消息中
             Address to = new InternetAddress(mailInfo.getToAddress());
             mailMessage.setRecipient(Message.RecipientType.TO, to);
             // 设置邮件消息的主题
             mailMessage.setSubject(mailInfo.getSubject());
             // 设置邮件消息发送的时间
             mailMessage.setSentDate(new Date());
             // 设置邮件消息的主要内容
             String mailContent = mailInfo.getContent();
             mailMessage.setText(mailContent);
             // 发送邮件
            
             // 邮件内容
             Multipart multipart = new MimeMultipart();
             //attach part
             BodyPart messageBodyPart = new MimeBodyPart();
             DataSource source = new FileDataSource(attachFile);
             messageBodyPart.setDataHandler(new DataHandler(source));
             // 附件中文显示编码
             sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
             messageBodyPart.setFileName("=?UTF-8?B?"
                     + enc.encode(attachFile.getName().getBytes()) + "?=");
             //messageBodyPart.setText(mailInfo.getContent());
             multipart.addBodyPart(messageBodyPart);
             
             //content part
             BodyPart messageContentBodyPart = new MimeBodyPart();
             messageContentBodyPart.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
             multipart.addBodyPart(messageContentBodyPart);
             
             mailMessage.setContent(multipart);


             Transport.send(mailMessage);
             return true;
         } catch (MessagingException ex) {
             ex.printStackTrace();
         }
         return false;
     }


/**
      * 以HTML格式发送邮件
      * 
      * @param mailInfo
      *            待发送的邮件信息
      */
     public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
         // 判断是否需要身份认证
         MailAuthenticator authenticator = null;
         Properties pro = mailInfo.getProperties();
         // 如果需要身份认证,则创建一个密码验证器
         if (mailInfo.isValidate()) {
             authenticator = new MailAuthenticator(mailInfo.getUserName(),
                     mailInfo.getPassword());
         }
         // 根据邮件会话属性和密码验证器构造一个发送邮件的session
         Session sendMailSession = Session
                 .getDefaultInstance(pro, authenticator);
         try {
             // 根据session创建一个邮件消息
             Message mailMessage = new MimeMessage(sendMailSession);
             // 创建邮件发送者地址
             Address from = new InternetAddress(mailInfo.getFromAddress());
             // 设置邮件消息的发送者
             mailMessage.setFrom(from);
             // 创建邮件的接收者地址,并设置到邮件消息中
             Address to = new InternetAddress(mailInfo.getToAddress());
             // Message.RecipientType.TO属性表示接收者的类型为TO
             mailMessage.setRecipient(Message.RecipientType.TO, to);
             // 设置邮件消息的主题
             mailMessage.setSubject(mailInfo.getSubject());
             // 设置邮件消息发送的时间
             mailMessage.setSentDate(new Date());
             // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
             Multipart mainPart = new MimeMultipart();
             // 创建一个包含HTML内容的MimeBodyPart
             BodyPart html = new MimeBodyPart();
             // 设置HTML内容
             html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
             mainPart.addBodyPart(html);
             // 将MiniMultipart对象设置为邮件内容
             mailMessage.setContent(mainPart);
             // 发送邮件
             Transport.send(mailMessage);
             return true;
         } catch (MessagingException ex) {
             ex.printStackTrace();
         }
         return false;
     }


     public static void main(String[] args) {
         // 这个类主要是设置邮件
         MailSenderInfo mailInfo = new MailSenderInfo();
         mailInfo.setMailServerHost("smtp.exmail.qq.com");
         mailInfo.setMailServerPort("25");
         mailInfo.setValidate(true);
         mailInfo.setUserName("send@smartinformation.cn");
         mailInfo.setPassword("Wing433433");// 您的邮箱密码
         mailInfo.setFromAddress("send@smartinformation.cn");
         mailInfo.setToAddress("hurui@idraws.cn");
         mailInfo.setSubject("test");
         mailInfo.setContent("Hi sir, \nThe report is ready");
         // 这个类主要来发送邮件
         SimpleMailSender mail = new SimpleMailSender();
         mail.sendTextMail(mailInfo, "E:\\free\\test.xlsx");// 发送文体格式
     }
 }

package com.jeecms.common.mail;


 /**   
  * 发送邮件需要使用的基本信息 
  */
 import java.util.Properties;


 public class MailSenderInfo {
     // 发送邮件的服务器的IP和端口
     private String   mailServerHost;
     private String   mailServerPort = "25";
     // 邮件发送者的地址
     private String   fromAddress;
     // 邮件接收者的地址
     private String   toAddress;
     // 登陆邮件发送服务器的用户名和密码
     private String   userName;
     private String   password;
     // 是否需要身份验证
     private boolean  validate       = false;
     // 邮件主题
     private String   subject;
     // 邮件的文本内容
     private String   content;
     // 邮件附件的文件名
     private String[] attachFileNames;


     /**
      * 获得邮件会话属性
      */
     public Properties getProperties() {
         Properties p = new Properties();
         p.put("mail.smtp.host", this.mailServerHost);
         p.put("mail.smtp.port", this.mailServerPort);
         p.put("mail.smtp.auth", validate ? "true" : "false");
         return p;
     }


     public String getMailServerHost() {
         return mailServerHost;
     }


     public void setMailServerHost(String mailServerHost) {
         this.mailServerHost = mailServerHost;
     }


     public String getMailServerPort() {
         return mailServerPort;
     }


     public void setMailServerPort(String mailServerPort) {
         this.mailServerPort = mailServerPort;
     }


     public boolean isValidate() {
         return validate;
     }


     public void setValidate(boolean validate) {
         this.validate = validate;
     }


     public String[] getAttachFileNames() {
         return attachFileNames;
     }


     public void setAttachFileNames(String[] fileNames) {
         this.attachFileNames = fileNames;
     }


     public String getFromAddress() {
         return fromAddress;
     }


     public void setFromAddress(String fromAddress) {
         this.fromAddress = fromAddress;
     }


     public String getPassword() {
         return password;
     }


     public void setPassword(String password) {
         this.password = password;
     }


     public String getToAddress() {
         return toAddress;
     }


     public void setToAddress(String toAddress) {
         this.toAddress = toAddress;
     }


     public String getUserName() {
         return userName;
     }


     public void setUserName(String userName) {
         this.userName = userName;
     }


     public String getSubject() {
         return subject;
     }


     public void setSubject(String subject) {
         this.subject = subject;
     }


     public String getContent() {
         return content;
     }


     public void setContent(String textContent) {
         this.content = textContent;
     }
 }

package com.jeecms.common.mail;


 import javax.mail.Authenticator;
 import javax.mail.PasswordAuthentication;
  
 /**
  * 服务器邮箱登录验证
  * 
  * @author MZULE
  * 
  */
 public class MailAuthenticator extends Authenticator {
  
     /**
      * 用户名(登录邮箱)
      */
     private String username;
     /**
      * 密码
      */
     private String password;
  
     /**
      * 初始化邮箱和密码
      * 
      * @param username 邮箱
      * @param password 密码
      */
     public MailAuthenticator(String username, String password) {
     this.username = username;
     this.password = password;
     }
  
     String getPassword() {
     return password;
     }
  
     @Override
     protected PasswordAuthentication getPasswordAuthentication() {
     return new PasswordAuthentication(username, password);
     }
  
     String getUsername() {
     return username;
     }
  
     public void setPassword(String password) {
     this.password = password;
     }
  
     public void setUsername(String username) {
     this.username = username;
     }
  
 }