邮件发送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创建邮件和发送邮件

原文地址:https://www.cnblogs.com/eleven258/p/10490166.html