javaMail发送邮件和附件(转载别人的文章加入了发送附件)

来源:互联网 发布:可以看youtube 软件 编辑:程序博客网 时间:2024/05/13 01:50
HuadaConfiguration类是读取mail.properties工具类 mail.properties文件里面的内容mailServerHost=smtp.genomics.cnmailServerPort=25fromAddress=abc@genomics.cnuserName=abc@genomics.cnpassword=*******
package com.zz.util;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.util.PropertyResourceBundle;import java.util.ResourceBundle;public class HuadaConfiguration {    private static ResourceBundle rb = null;    private static final String filePath = "mail.properties";    private static long lastModified = 0;    private static HuadaConfiguration config = new HuadaConfiguration();    private HuadaConfiguration() {    }    public static HuadaConfiguration getInstance() {        return config;    }    public String getValue(String key) {        if (rb == null) {            loadExceptionProperties();        }        if (checkFileUpdate()) {            loadExceptionProperties();        }        String result = rb.getString(key);        if (result == null) {            System.out.println("Can not find value in mail.properties");            throw new RuntimeException();        }        return result;    }    private boolean checkFileUpdate() {        URL fileUrl = getClass().getClassLoader().getResource(filePath);        File file = new File(fileUrl.getFile());        long time = file.lastModified();        if (time != lastModified) {            lastModified = time;            return true;        }        return false;    }    private void loadExceptionProperties() {        InputStream in = null;        try {            in = getClass().getClassLoader().getResourceAsStream(filePath);            rb = new PropertyResourceBundle(in);        } catch (FileNotFoundException e) {        System.out.println("Can Not file mail.properties!");            throw new RuntimeException(e);        } catch (IOException e) {        System.out.println("IOExecption when reading and parsing file mail.properties!");            throw new RuntimeException(e);        } finally {            if (in != null) {                try {                    in.close();                } catch (IOException e) {                System.out.println("Can not close Stream mail.properties!");                    throw new RuntimeException(e);                }            }        }    }}

 2Po类

package com.zz.util;/**   * 发送邮件需要使用的基本信息   */    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 = true;        // 邮件主题        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;        }    }   


 设置密码和邮箱用户名的Pojo类

package com.zz.util;import javax.mail.*;   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);       }   }  


这个类是发邮件的核心类

package com.zz.util;import java.io.File;import java.io.FileOutputStream;import java.util.Date;    import java.util.Properties;   import javax.activation.DataHandler;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 javax.mail.internet.MimeUtility;  /**   * 简单邮件(带附件的邮件)发送器   */    public class SimpleMailSender  {    /**     * 以文本格式发送邮件     * @param mailInfo 待发送的邮件的信息     */        public static boolean sendTextMail(MailSenderInfo mailInfo) {          // 判断是否需要身份认证          MyAuthenticator authenticator = null;          Properties pro = mailInfo.getProperties();         if (mailInfo.isValidate()) {          // 如果需要身份认证,则创建一个密码验证器            authenticator = new MyAuthenticator(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());          //放入内容和附件类        MimeMultipart allMultipart = new MimeMultipart("mixed");      //设置内容      MimeBodyPart HtmlBodypart = new MimeBodyPart();      // 设置邮件消息的主要内容          String mailContent = mailInfo.getContent();      HtmlBodypart.setContent(mailContent,"text/html;charset=gbk");            //设置附件      MimeBodyPart attachFileBodypart = new MimeBodyPart();      MimeMultipart attachFileMMP = new MimeMultipart("related");      String[] strArrgs = mailInfo.getAttachFileNames(); //所有文件路径      for(int i = 0; i < strArrgs.length; i++) {      MimeBodyPart attachFileBody = new MimeBodyPart();      FileDataSource fds = new FileDataSource(new File(strArrgs[i]));//附件文件        attachFileBody.setDataHandler(new DataHandler(fds));//得到附件本身并至入BodyPart        //MimeUtility.encodeText()解决文件名乱码问题      attachFileBody.setFileName(MimeUtility.encodeText(fds.getName()));//得到文件名同样至入BodyPart        attachFileMMP.addBodyPart(attachFileBody);//放入BodyPart      }      attachFileBodypart.setContent(attachFileMMP,"text/html;charset=gbk");            //放入内容      allMultipart.addBodyPart(HtmlBodypart);      //放入附件      allMultipart.addBodyPart(attachFileBodypart);      mailMessage.setContent(allMultipart);      mailMessage.saveChanges();            //文件内容写在本地,测试 用      mailMessage.writeTo(new FileOutputStream("D:/ComplexMessage.eml"));      // 发送邮件          Transport.send(mailMessage);         return true;          } catch (Exception ex) {              ex.printStackTrace();          }          return false;        }           /**         * 以HTML格式发送邮件         * @param mailInfo 待发送的邮件信息         */        public static boolean sendHtmlMail(MailSenderInfo mailInfo){          // 判断是否需要身份认证          MyAuthenticator authenticator = null;         Properties pro = mailInfo.getProperties();         //如果需要身份认证,则创建一个密码验证器           if (mailInfo.isValidate()) {            authenticator = new MyAuthenticator(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;        }    }   


测试类

package com.zz.mail;import com.zz.util.HuadaConfiguration;import com.zz.util.MailSenderInfo;import com.zz.util.SimpleMailSender;public class SendMail {public static void main(String[] args) {  //这个类主要是设置邮件       MailSenderInfo mailInfo = new MailSenderInfo();      HuadaConfiguration huadaConfiguration =  HuadaConfiguration.getInstance();     mailInfo.setMailServerHost(huadaConfiguration.getValue("mailServerHost"));        mailInfo.setMailServerPort(huadaConfiguration.getValue("mailServerPort"));        mailInfo.setValidate(true);        mailInfo.setUserName(huadaConfiguration.getValue("userName"));        mailInfo.setPassword(huadaConfiguration.getValue("password"));//您的邮箱密码        mailInfo.setFromAddress(huadaConfiguration.getValue("fromAddress"));        mailInfo.setToAddress("aassdd_zz@163.com");        mailInfo.setSubject("测试邮箱标题附件");        mailInfo.setContent("测试邮箱内容");     mailInfo.setAttachFileNames(new String[]{"D:/1.docx","D:/2.docx","D:/资料/照片/单反/1/DSC_0031.JPG"}); SimpleMailSender.sendTextMail(mailInfo);}}

一些文档路径问题,请修改下

原创粉丝点击