zoukankan      html  css  js  c++  java
  • 邮件发送javamail

      写在前面:

        最近要将dms系统原始发邮件的功能(调用的webservice)改变成使用smtp服务来发送邮件(使用javamail来发送),这里简单记录下,方便日后有用到,直接拿来用即可。

        

        首先导入需要用到的jar包:activation.jar  mail.jar

        涉及到的相关类:

        直接上代码了:

    TestMail.java

    package dms.newmail;
    
    import java.util.Properties;
    
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    
    public class TestMail {
        
        
        static String to = "cmm-dwcp-sw03@mail.foxconn.com";
        static String cc = "";
    
        public static void main(String[] args){
            String subject = "【DMS邮件测试】";
            String content = "Dear  all,
    
    " +
                    "   DMS邮件功能测试!
    ";
            MailService mailService = new MailServiceImpl();
            try {
               
                mailService.sendMail(to, cc,subject, content);
                
            } catch (Exception e) {
                
                e.printStackTrace();
            }
        }
        
    }

      如果是要在内容中含有超链接,只需要在内容中加上<html><body><a href="这里写链接">测试</a></body></html>标签就好了(eg:<html><body><a href="http://10.203.70.189/spas">測試</a></body></html>)

      MailService.java

    package dms.newmail;
    
    
    public interface MailService {
        /**
         * 发送邮件
         *
         * @param to      接收人
         * @param subject 邮件主题
         * @param content 邮件内容
         */
        void sendMail(String to, String subject, String content) throws Exception;
    
        void sendNoThreadMail(String to, String subject, String content);
    
        /**
         * 发送邮件
         * @param to 接收人
         * @param cc 抄送人
         * @param subject 邮件主题
         * @param content 邮件内容
         * @throws BusinessException
         */
        void sendMail(String to, String cc,String subject, String content) throws Exception;
    
    }

      MailServieImpl.java

    package dms.newmail;
    
    import org.apache.log4j.Logger;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.internet.MimeMessage;
    
    
    
    public class MailServiceImpl implements MailService {
         private static Logger logger = Logger.getLogger(MailServiceImpl.class);
        
        public void sendMail(String to, String subject, String content) {
            MailThread mailThread = new MailThread(to, subject, content);
            System.out.println("to:" + to + "
    subject:" + subject + "
    
    content:" + content);
            mailThread.setName("發送" + to + "郵件");
            mailThread.start();
    
        }
    
        
        public void sendNoThreadMail(String to, String subject, String content) {
            System.out.println("to:" + to + "
    ,subject:" + subject + "
    
    ,content:" + content);
            MailUtil mailUtil = new MailUtil();
            Session session = mailUtil.getSession();
            MimeMessage message = null;
            try {
                message = mailUtil.createSimpleMessage(session, to, subject, content);
            } catch (Exception e) {
                logger.error("创建邮件失败");
            }
            try {
                mailUtil.sendMessage(session, message);
            } catch (MessagingException e) {
                logger.error("连接不上SMTP服务器");
            }
            System.out.println("發送郵件成功");
        }
    
    
       /**
        * to:发送给(多个邮箱以;号隔开)
        * cc:抄送(多个邮箱以;号隔开)
        * subject:主题
        * content:内容
        */
        public void sendMail(String to, String cc, String subject, String content) throws Exception {
            MailThread mailThread = new MailThread(to, cc,subject, content);
    //        System.out.println(to);
            mailThread.setName("發送" + to + "郵件"+"抄送给"+to);
            mailThread.start();
        }
    
    }

      MailThread.java

    package dms.newmail;
    
    import org.apache.log4j.Logger;
    
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.internet.MimeMessage;
    
    
    public class MailThread extends Thread {
        private static Logger logger = Logger.getLogger(MailThread.class);
    
        private String to;
        private String subject;
        private String content;
        private String cc;
    
    
        public MailThread() {
        }
    
        public MailThread(String to, String subject, String content) {
            this.to = to;
            this.subject = subject;
            this.content = content;
        }
    
    
        public MailThread(String to, String cc, String subject, String content) {
            this.to = to;
            this.cc = cc;
            this.subject = subject;
            this.content = content;
        }
    
        
        public void run() {
            MailUtil mailUtil = new MailUtil();
            Session session = mailUtil.getSession();
            MimeMessage message = null;
            try {
                message = mailUtil.createSimpleMessage(session, to, cc, subject, content);
            } catch (Exception e) {
                logger.error("创建邮件失败");
            }
            try {
                mailUtil.sendMessage(session, message);
            } catch (MessagingException e) {
                logger.error("连接不上SMTP服务器");
            }
    
            System.out.println("發送郵件成功");
        }
    }

      MailUtil.java

    package dms.newmail;
    
    
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.*;
    
    
    public class MailUtil {
        //smtp服务器
        public static final String SMTP_HOST = "10.134.28.95";
        public static final String USER_NAME = "dmd.admin@foxconn.com";
        public static final String PASS_WORD = "";
        /**
         * 获取邮件会话
         *
         * @return
         */
        public Session getSession() {
            Properties prop = new Properties();
            prop.setProperty("mail.host", SMTP_HOST);
            prop.setProperty("mail.transport.protocol", "smtp");
            prop.setProperty("mail.smtp.auth", "false");
            //使用JavaMail发送邮件的5个步骤
            //1、创建session
            Session session = Session.getInstance(prop);
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
            return session;
        }
    
        /**
         * 创建简单文本
         *
         * @param session
         * @param to
         * @param subject
         * @param content
         * @return
         */
        public MimeMessage createSimpleMessage(Session session, String to, String subject, String content) throws Exception {
            MimeMessage message = null;
            message = getMessage(session, to, subject);
    
            message.setText(content, "UTF-8");
            return message;
        }
    
        public MimeMessage createSimpleMessage(Session session, String to, String cc, String subject, String content) throws Exception {
            MimeMessage message = null;
            if (cc == null || "".equals(cc)) {
                message = getMessage(session, to, subject);
            } else {
                message = getMessage(session, to, cc, subject);
            }
    
            message.setText(content, "UTF-8");
            return message;
        }
    
    
        /**
         * 获取邮件对象
         *
         * @param session 邮件会话
         * @param to      收件人
         * @param subject 邮件主题
         * @return
         * @throws Exception
         */
        private MimeMessage getMessage(Session session, String to, String subject) throws Exception {
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
            //指明邮件的发件人
            message.setFrom(new InternetAddress(USER_NAME));
            String[] addresses = to.split(";");
            Set addSet = new HashSet();
            for(int i=0;i<addresses.length;i++){
                if (!"".equals(addresses[i].trim()))
                    addSet.add(addresses[i].trim());
            }
            
            InternetAddress[] internetAddresses = new InternetAddress[addSet.size()];
            Iterator iterable = addSet.iterator();
            for (int i = 0; i < addSet.size(); i++) {
                internetAddresses[i] = new InternetAddress((String) iterable.next());
            }
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            message.setRecipients(Message.RecipientType.TO, internetAddresses);
            //邮件的标题
            message.setSubject(subject, "UTF-8");
            message.setSentDate(new Date(System.currentTimeMillis()));
            //返回创建好的邮件对象
            return message;
        }
    
        /**
         * @param session
         * @param to      收件人
         * @param cc      抄送人
         * @param subject 邮件主题
         * @return
         * @throws Exception
         */
        private MimeMessage getMessage(Session session, String to, String cc, String subject) throws Exception {
            //创建邮件对象
            MimeMessage message = new MimeMessage(session);
            //指明邮件的发件人
            message.setFrom(new InternetAddress(USER_NAME));
            String[] addresses = to.split(";");
            String[] addresses2 = cc.split(";");
            Set addSet = new HashSet();
            Set addSet2 = new HashSet();
            for(int i=0;i<addresses.length;i++){
                if (!"".equals(addresses[i].trim()))
                    addSet.add(addresses[i].trim());
            }
            for(int i=0;i<addresses2.length;i++){
                if (!"".equals(addresses2[i].trim()))
                    addSet2.add(addresses2[i].trim());
            }
           
           
            InternetAddress[] internetAddresses = new InternetAddress[addSet.size()];
            Iterator iterable = addSet.iterator();
            for (int i = 0; i < addSet.size(); i++) {
                internetAddresses[i] = new InternetAddress((String) iterable.next());
            }
            InternetAddress[] internetAddresses2 = new InternetAddress[addSet2.size()];
            Iterator iterable2 = addSet2.iterator();
            for (int i = 0; i < addSet2.size(); i++) {
                internetAddresses2[i] = new InternetAddress((String) iterable2.next());
            }
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发
            message.setRecipients(Message.RecipientType.TO, internetAddresses);
            message.setRecipients(Message.RecipientType.CC, internetAddresses2);
            //邮件的标题
            message.setSubject(subject, "UTF-8");
            message.setSentDate(new Date(System.currentTimeMillis()));
            //返回创建好的邮件对象
            return message;
        }
    
        /**
         * 发送邮件
         *
         * @param session 邮件会话
         * @param message 邮件
         * @throws MessagingException
         */
        public void sendMessage(Session session, Message message) throws MessagingException {
            //2、通过session得到transport对象
            Transport ts = session.getTransport();
            //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
            ts.connect(SMTP_HOST,USER_NAME,PASS_WORD);
    //        ts.connect();
            //5、发送邮件
            if (null != message)
                ts.sendMessage(message, message.getAllRecipients());
            ts.close();
        }
    
    
    }

      LogUtil.java:

    package dms.newmail;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.PrintWriter;
    import java.io.StringWriter;
    
    public class LogUtil {
        private static Logger logger = LoggerFactory.getLogger(LogUtil.class);
    
        public static String getTrace(Throwable throwable) {
            StringWriter stringWriter = new StringWriter();
            PrintWriter printWriter = new PrintWriter(stringWriter);
            throwable.printStackTrace(printWriter);
            StringBuffer stringBuffer = stringWriter.getBuffer();
            return stringBuffer.toString();
        }
    
        public static void main(String[] args) {
            String  strTrace=getTrace(new Throwable());
            System.out.println(strTrace);
    
            new Throwable().printStackTrace();
        }
    }

      

      好啦,代码搬运完成啦~~~

      这一块主要还是斌哥在spas写好的,这边dms用到我只是拿现成的啦~~

      参考链接:https://www.cnblogs.com/xdp-gacl/p/4216311.html-----JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

  • 相关阅读:
    hadoop(五)scp命令copy文件和配置(完全分布式准备二)|7
    hadoop(四)centos7克隆|静态ip|机器名|映射关系|别名配置(完全分布式准备一)|6
    大数据及hadoop简要概念
    hadoop(三)伪分布模式hdfs文件处理|5
    Hadoop(二) 单节点案例grep和wordcount|4
    centos7 ip/映射/机器名变更/克隆(克隆后配置修改)|2
    centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1
    Hadoop(一) centos7 jdk安装,hadoop安装|3
    hive常用函数五
    hive常用函数四
  • 原文地址:https://www.cnblogs.com/eleven258/p/10490166.html
Copyright © 2011-2022 走看看