JavaMail 异步发送 自己给自己看得备忘录

发送邮件这种耗时坑爹的东西,必然要用异步实现比较好。尤其是用gmail但是gmail服务器还抽风的时候。

很原始的实现,线程。。

可以接上一篇的JavaMail简介写:

new Thread(new Rinnable(){
    public void run() {
        MailUtil.sendMail("一些需要的参数");
    } catch(Exception e){
        //另外一些操作。。
    }
}).start();


涨姿势了,可以用线程池:

Properties props = new Properties();
Runnable task = new Runnable() {
            public void run() {
                try {
                    MailSender.sendMail(emailAddr, mailTitle, mailConcept);
                } catch (Exception ex) {
                    //error message
                };
            };
        };
       executor.execute(task);


补充一个异步发送邮件全Source:

package com.xxx.xxx.accountmgt.util;

import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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.apache.log4j.Logger;
import org.jfree.util.Log;
/**
 * @version 1.0
 * @author fengym <[email protected]>
 * Description 邮件发送器
 */
public class MailUtil {
    final static Logger logger = Logger.getLogger(MailUtil.class);
    private static Executor executor = Executors.newFixedThreadPool(10);
    /**
     * 发送邮件方法
     */
    public static void sendMail(final String emailAddr, final String mailTitle,
            final String mailConcept) throws Exception {
    	if(Log.isInfoEnabled()){
    		logger.info("send mail start!");
    		logger.info("To: " + emailAddr + " Title: " + mailTitle);
        }
        Properties props = new Properties();
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        props.load(classLoader.getResourceAsStream("mail.properties"));
        final String username = props.getProperty("mail.username");
        final String password = props.getProperty("mail.password");
        final String mailFrom = props.getProperty("mail.from");
        Session mailSession = Session.getDefaultInstance(props,
                new Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });
        mailSession.setDebug(false);
        MimeMessage message = new MimeMessage(mailSession);
        message.setSubject(mailTitle);
        message.setFrom(new InternetAddress(mailFrom));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
                emailAddr, false));
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setContent(mailConcept, "text/html; charset=utf-8");
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(messageBodyPart);
        message.setContent(multipart);
        Transport transport = mailSession.getTransport();
        transport.connect();
        transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
        transport.close();
		if(Log.isInfoEnabled()){
			logger.info("end!");
		}
        
    }
    /**
     * 异步方式发送邮件
     */
    public static void sendMailByAsync(final String emailAddr, final String mailTitle,
            final String mailConcept){
        if(Log.isInfoEnabled()){
			logger.info("send mail by async");
		}
        
        Runnable task = new Runnable() {
            public void run() {
                try {
                    MailUtil.sendMail(emailAddr, mailTitle, mailConcept);
                } catch (Exception ex) {
                    logger.error("ERROR To: " + emailAddr + " Title: " + mailTitle , ex);
                };
            };
        };
       executor.execute(task);
    }
    
    public static void main(String[] args) throws Exception {
    	MailUtil.sendMailByAsync("[email protected]", "我是标题", "我是内容");
     }
}

配置文件:

mail.transport.protocol=smtp
mail.host=smtp.gmail.com
mail.smtp.auth=true
mail.smtp.port=465
mail.smtp.starttls.enable=true
[email protected]
mail.password=xxxxxxxx
[email protected]
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback=false
mail.smtp.socketFactory.port=465


你可能感兴趣的:(java,javamail,异步发送邮件)