使用javamail发送邮件

来源:互联网 发布:java的框架 编辑:程序博客网 时间:2024/05/01 12:03

在java web项目我们经常会使用到发送邮件,比如发送告警通知,对实时性要求不太高的项目就可以发邮件,毕竟是免费的嘛,这里写了几段java发送邮件的代码,参考http://www.iteye.com/topic/352753,自己又改了一下,比如发送附件,多个抄送人等。

依赖jar包:mail-1.4.jar


1、MailSenderInfo邮件信息类

package com.chen.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 = false;        // 邮件主题        private String subject;        // 邮件的文本内容        private String content;        // 邮件附件的文件名        private String[] attachFileNames;     // 邮件的接收者,可以有多个    private String[] receivers;    // 邮件的抄送者,可以有多个    private String[] ccs;        /** *//**         * 获得邮件会话属性         */        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;        }        public String[] getCcs() {        return ccs;    }    public void setCcs(String[] ccs) {        this.ccs = ccs;    }    public String[] getReceivers() {        return receivers;    }    public void setReceivers(String[] receivers) {        this.receivers = receivers;    }}   


2、MyAuthenticator  该类发送邮件是鉴权用继承Authenticator

package com.chen.util;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/** * 该类发送邮件是鉴权用 * 继承Authenticator *  * */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);       }   }   


3、MailUtil  发送邮件工具类


package com.chen.util;import java.util.Date;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 MailUtil {//protected static final String serverHost=PropertiesUtil.getPropertiesByKey("prop.properties", "ServerHost");protected static final String serverHost="smtp.qq.com";protected static final String serverPort = "25";protected static final String userName = "******@qq.com";protected static final String password = "********";/** * 发送邮件给多个抄送人 * */public static boolean sendMailtoMultiCC(MailSenderInfo mailInfo){        MyAuthenticator authenticator = null;        if (mailInfo.isValidate())         {            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());        }        Session sendMailSession = Session.getInstance(mailInfo.getProperties(), authenticator);        //sendMailSession.setDebug(true);        try {        //创建邮件            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);            // 获取抄送者信息            String[] ccs = mailInfo.getCcs();            if (ccs != null){                // 为每个邮件接收者创建一个地址                Address[] ccAdresses = new InternetAddress[ccs.length];                for (int i=0; i<ccs.length; i++){                    ccAdresses[i] = new InternetAddress(ccs[i]);                }                // 将抄送者信息设置到邮件信息中,注意类型为Message.RecipientType.CC                mailMessage.setRecipients(Message.RecipientType.CC, ccAdresses);            }                         mailMessage.setSubject(mailInfo.getSubject());            mailMessage.setSentDate(new Date());            // 设置邮件内容            Multipart mainPart = new MimeMultipart();            BodyPart html = new MimeBodyPart();            html.setContent(mailInfo.getContent(), "text/html; charset=UTF-8");            //添加附件            String[] fileName = mailInfo.getAttachFileNames();            if(fileName != null)            {            for(int i=0;i<fileName.length;i++)            {                    BodyPart bodyPart = new MimeBodyPart();            DataHandler dh = new DataHandler(new FileDataSource(fileName[i]));            bodyPart.setDataHandler(dh);            //防止附件名中文乱码            bodyPart.setFileName(MimeUtility.encodeText(dh.getName()));                    mainPart.addBodyPart(bodyPart);            }            }            mainPart.addBodyPart(html);            mailMessage.setContent(mainPart);            // 发送邮件            Transport.send(mailMessage);            return true;        } catch (Exception ex) {            ex.printStackTrace();        }        return false;    }//发送简单邮件public static void main(String [] args) throws MessagingException{ MailSenderInfo mailInfo = new MailSenderInfo();        mailInfo.setMailServerHost(serverHost);        mailInfo.setMailServerPort(serverPort);        mailInfo.setValidate(true);        mailInfo.setUserName(userName);        mailInfo.setPassword(password);        mailInfo.setFromAddress(userName);        mailInfo.setToAddress("**************@qq.com");        mailInfo.setSubject("我是主题");        mailInfo.setContent("我是内容");        String tos = "*******,*********";        if(!tos.equals("")){        String[] receivers = tos.split(",");            String[] ccs = receivers;            mailInfo.setReceivers(receivers);//多个接收人            mailInfo.setCcs(ccs);//多个抄送人        }        String fileName = "C:\\Users\\Administrator\\Desktop\\******.png,C:\\Users\\Administrator\\Desktop\\*********.sql";        if(!fileName.equals(""))        {        String [] fileNames = fileName.split(",");        mailInfo.setAttachFileNames(fileNames);        }               sendMailtoMultiCC(mailInfo);//发送多个抄送人}}


使用方法可以参考第3个类MailUtil的main方法里调用发送邮件的方法sendMailtoMultiCC,可以抄送给多人,可以发送多个附件。

借鉴了han2000lei博客,增加了多个抄送人和附件,如有兴趣可以移步。


0 0
原创粉丝点击