public class EmailTask
{
   
    // Session used by the javamail classes
    private Session session;
   
    // List of messages邮件发送信息对象列表
    private List<Message> messages = null;
   
    /**构造方法
     * Creates a new EmailTask.
     */
    public EmailTask()
    {
        //邮件发送入参Properties,用来设置参数
        Properties mailProps = new Properties();
        //邮件服务器地址:域名或ip
        String host = "smtpscn.test.com";
        //邮件服务器端口,默认25
        String port = "25";
        //是否开启TLS方式发送,1 是,0 否.默认否
        String startTLS = "0";
        //是否验证证书,1 是,0 否.默认是
        String cert = "0";
        //是否鉴权true false
        String isAuth = "true";
        //鉴权账号
        final String account = "zWX161496";
        //鉴权密码
        final String pwd = "Asd123";
        if (host != null && !"".equals(host))
        {
            mailProps.setProperty("mail.smtp.host", host);
        }
        if (port != null && !"".equals(port))
        {
            mailProps.setProperty("mail.smtp.port", port);
        }
        //如果开始TLS方式
        if ("1".equals(startTLS))
        {
            mailProps.setProperty("mail.smtp.starttls.enable", "true");
            //是否验证证书
            if ("0".equals(cert))
            {
                mailProps.setProperty("mail.smtp.ssl.trust", "*");
            }
        }
        //是否鉴权:true false
        mailProps.setProperty("mail.smtp.auth", isAuth);
       
        // Create the mail session, check authenticator
        session = Session.getInstance(mailProps, new Authenticator()
        {
            protected PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(account, pwd);
            }
        });
       
        messages = new LinkedList();
    }
   
    /**发送一批邮件
     * 如果调用该方法,将不会通过单独起一个线程的方式来发送邮件
     * 好处是如果发送失败可以立即返回结果
     * 缺点是不适合频率较高的操作
     */
    public void sendMessage()
    {
        try
        {
            Iterator<Message> messageIterator = messages.iterator();
            while (messageIterator.hasNext())
            {
               
                Message message = messageIterator.next();
                Transport.send(message);
            }
        }
        catch (MessagingException me)
        {
            //
        }
        catch (Exception e)
        {
            //
        }
    }
   
   
    /**
     * 构造Message
     * @param toName the name of the recipient of this email.
     * @param toEmail the email address of the recipient of this email.
     * @param fromName the name of the sender of this email.
     * @param fromEmail the email address of the sender of this email.
     * @param subject the subject of the email.
     * @param body the body of the email.
     */
    public void addMessage(String toName, String toEmail, String fromName,
            String fromEmail, String subject, String body)
    {
       
        if (toEmail == null || fromEmail == null || subject == null
                || body == null)
        {
            DebugLogFactory.debug(MailTmplTool.class,
                    "Error sending email in EmailTask.java: Invalid fields.");
        }
        else
        {
            try
            {
                Message message = createMessage();
                Address to = null;
                Address from = null;
                if (toName != null)
                {
                    to = new InternetAddress(toEmail, toName);
                }
                else
                {
                    to = new InternetAddress(toEmail);
                }
                if (fromName != null)
                {
                    from = new InternetAddress(fromEmail, fromName);
                }
                else
                {
                    from = new InternetAddress(fromEmail);
                }
                message.setRecipient(Message.RecipientType.TO, to);
                message.setFrom(from);
                message.setSubject(subject);
                message.setSentDate(new Date());
                message.setHeader("Content-Transfer-Encoding", "BASE64");
                message.setContent(body, "text/html;charset=UTF-8");
                messages.add(message);
            }
            catch (Exception e)
            {
                //
            }
        }
    }
   
    /**
     *
     * @return A new JavaMail message.
     */
    public Message createMessage()
    {
        return new MimeMessage(session);
    }
}

补充:可以使用多线程发送发送,好处是不影响主线程,可以立即返回。

创建一个链表LinkedList(可包装为邮件发送工厂),用来存放每个邮件任务对象,启用几个线程如6个,每次发邮件时,将发邮件任务对象添加到LinkedList,注意枷锁,并通知所有线程激活notifyall;

当LinkedList有元素时,这些线程被激活,同时从LinkedList取出任务,注意加锁,本别发送;

当列表为空时,就挂起wait。

javamail邮件发送例子的更多相关文章

  1. Spring的javaMail邮件发送(带附件)

    项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...

  2. JavaMail邮件发送不成功的那些坑人情况及分析说明

    [我的Segmentfault原文]https://segmentfault.com/a/1190000008030346 前言   JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有 ...

  3. javaMail 邮件发送和接收示例,支持正文图片、html、附件(转)

    转自:https://blog.csdn.net/star_fly4/article/details/52037587 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文 ...

  4. JavaMail 邮件发送

    jar包部署 /** * 通过SMTP进行邮件集成 */ public class CmpSendMail { // 邮件发送服务器主机 private final static String HOS ...

  5. 应用层之E-mail服务及javaMail邮件发送的知识总结

    关于Email服务你需要知道的知识点: 概述: 今天来介绍一下应用层的电子邮件服务,我们每天几乎都在用,电子邮件(email)服务也是一种基于C/S模式的服务,它采用的是一种"存储-转发&q ...

  6. javaMail邮件发送的简单实现

    package com.test.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.Ses ...

  7. (转)JavaMail邮件发送-发送一个文本邮件和一些问题说明

    需要下载的JAR包: JavaMail:http://www.oracle.com/technetwork/java/javamail/index.html JAF:http://www.oracle ...

  8. 带有附件及图片正文的JavaMail邮件发送

    1 package javamail; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Properties; ...

  9. javamail邮件发送

    // 发送邮件 public static void send(String toEmail, String content) { Session session = getSession(); tr ...

随机推荐

  1. Robot Framework-Mac版本安装

    Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...

  2. Debian 8 最小化系统安装muduo

    最近开始学习陈硕的muduo C++ Linux多线程网络库,首先当然是要安装.其间遇到过不少问题,最后不能说都解决了,只能说找到了一条不会遇到什么问题的路线.总结起来是两点: 注意各软件之间要版本匹 ...

  3. C/C++中static关键字详解

    静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值. 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见.用法1:函数内部声明 ...

  4. 某些版本的IIS可能有SessionID混淆的Bug

    某公司为我服务的甲方公司开发一个挺重要的应用.已经上线了一年多了,不停的修修改改.也算正常使用.正所谓,秀恩爱,死得快.No 作就No Die.也少知道是那个Smarty Pants闲的蛋疼说新修改的 ...

  5. [自娱自乐] 2、超声波测距模块DIY笔记(二)

    前言 上一节我们已经大致浏览下目前销售的超声波测距模块同时设计了自己的分析电路,这次由于我买的电子元件都到了,所以就动手实验了下!至写该笔记时已经设计出超声波接收模块和超声波发射模块,同时存在超声波发 ...

  6. 支持事件穿透?使用pointer-events样式

    使用绝对定位元素,让元素A完全盖住元素B时,如何通过元素A来响应元素B的事件呢? 上图可以用下面的SVG代码来实现: <svg width="200" height=&quo ...

  7. mac下缺乏make wget怎么办?

    1.下载command Line tools for Xcode http://www.mkyong.com/mac/how-to-install-gcc-compiler-on-mac-os-x/ ...

  8. atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o

    atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o 1. 建立applet:: 1 2. Applet 码 1 3. Applet (awt)跟japplet (swing) ...

  9. iOS开发-UITextView根据内容自适应高度

    UITextView作为内容文本输入区域,有的时候我们需要根据内容动态改变文本区域的高度,效果如下: 定义UITextView,实现UITextViewDelegate: -(UITextView * ...

  10. Maven学习总结(四)——Maven核心概念——转载

    一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...