以下类是在网上孙钰佳的版本上改写而来,主要变化了三点:1.去掉了附件部分;2.形式从纯Java类改成可注入方式;3.to,cc和bcc都变成了一堆人,以前是一个人。

以下是Java类的代码:

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
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;

/**
 * 报告邮件发送类
 * 2013年9月13日22:28:54
 */
public class GerneralReportMailService{
    private String smtpServer;
    private String smtpUsername;
    private String smtpPassword;
    private String fromMailAddress;
    private String toMailAddress;
    private String ccMailAddress;
    private String bccMailAddress;
    
    /**
     * 无参构造函数
     */
    public GerneralReportMailService(){
        
    }
    
    /**
     * 示例
     */
    public boolean sendMail() throws Exception{
        String title="Sample";// 标题        
        String content="<ul><li>1</li><li>A</li><li>+</li></ul>";// 这里组合HTML文本
        return sendMail(title,sb.toString());
    }
    
    /**
     * 发送邮件的关键函数
     *
     * @param title
     * @param content
     * @return
     * @throws Exception
     */
    private boolean sendMail(String title,String content) throws Exception{
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", smtpServer);
        // 获得邮件会话对象
        Session session = Session.getDefaultInstance(props,new SmtpAuthenticator(smtpUsername, smtpPassword));
        /** *************************************************** */
        // 创建MIME邮件对象
        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setFrom(new InternetAddress(fromMailAddress));// 发件人
        
        mimeMessage.setRecipients(Message.RecipientType.TO, getInternetAddressArr(toMailAddress));// To收件人
        mimeMessage.setRecipients(Message.RecipientType.CC, getInternetAddressArr(ccMailAddress));// Cc收件人
        mimeMessage.setRecipients(Message.RecipientType.BCC, getInternetAddressArr(bccMailAddress));// Bcc收件人
        
        mimeMessage.setSubject(title);
        mimeMessage.setSentDate(new Date());// 发送日期
        Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
        /** *************************************************** */
        BodyPart bodyPart = new MimeBodyPart();// 正文
        bodyPart.setDataHandler(new DataHandler(content,"text/html;charset=utf8"));// 网页格式
        mp.addBodyPart(bodyPart);
        mimeMessage.setContent(mp);// 设置邮件内容对象
        Transport.send(mimeMessage);// 发送邮件
        
        
        return true;
    }
    
    private InternetAddress[] getInternetAddressArr(String mialAddr) throws Exception{
        String[] arr=mialAddr.split(",");
        
        InternetAddress[] retval=new InternetAddress[arr.length];
        
        for(int i=0;i<arr.length;i++){
            retval[i]=new InternetAddress(arr[i]);
        }
        
        return retval;
    }
    
    
    public String getSmtpServer() {
        return smtpServer;
    }
    public void setSmtpServer(String smtpServer) {
        this.smtpServer = smtpServer;
    }
    public String getSmtpUsername() {
        return smtpUsername;
    }
    public void setSmtpUsername(String smtpUsername) {
        this.smtpUsername = smtpUsername;
    }
    public String getSmtpPassword() {
        return smtpPassword;
    }
    public void setSmtpPassword(String smtpPassword) {
        this.smtpPassword = smtpPassword;
    }
    public String getFromMailAddress() {
        return fromMailAddress;
    }
    public void setFromMailAddress(String fromMailAddress) {
        this.fromMailAddress = fromMailAddress;
    }
    public String getToMailAddress() {
        return toMailAddress;
    }
    public void setToMailAddress(String toMailAddress) {
        this.toMailAddress = toMailAddress;
    }
    public String getCcMailAddress() {
        return ccMailAddress;
    }
    public void setCcMailAddress(String ccMailAddress) {
        this.ccMailAddress = ccMailAddress;
    }
    public String getBccMailAddress() {
        return bccMailAddress;
    }
    public void setBccMailAddress(String bccMailAddress) {
        this.bccMailAddress = bccMailAddress;
    }
}

/**
 * Smtp认证
 */
class SmtpAuthenticator extends Authenticator {
    String username = null;
    String password = null;

// SMTP身份验证
    public SmtpAuthenticator(String username, String password) {
        this.username = username;
        this.password = password;
    }

public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(this.username, this.password);
    }

}

class ByteArrayDataSource implements DataSource {

private final String contentType;
    private final byte[] buf;
    private final int len;

public ByteArrayDataSource(byte[] buf, String contentType) {
        this(buf, buf.length, contentType);
    }

public ByteArrayDataSource(byte[] buf, int length, String contentType) {
        this.buf = buf;
        this.len = length;
        this.contentType = contentType;
    }

public String getContentType() {
        if (contentType == null)
            return "application/octet-stream";
        return contentType;
    }

public InputStream getInputStream() {
        return new ByteArrayInputStream(buf, 0, len);
    }

public String getName() {
        return null;
    }

public OutputStream getOutputStream() {
        throw new UnsupportedOperationException();
    }
}

以下是配置此bean的XML:

<bean id="gerneralReportMailService" class="com.ibm.XXX.service.GerneralReportMailService">
        <property name="smtpServer"><value>smtp.163.com</value></property>
        <property name="smtpUsername"><value>unknownuser@163.com</value></property>
        <property name="smtpPassword"><value>unknownuserPswd</value></property>
        <property name="fromMailAddress"><value>unknownuser@163.com</value></property>
        <property name="toMailAddress"><value>a@b.c,1@2.3</value></property>
        <property name="ccMailAddress"><value>d@j.k</value></property>
        <property name="bccMailAddress"><value>w@v.x,s@ufo.com</value></property>
    </bean>

一个用于发送HTML格式邮件的类的更多相关文章

  1. 用Java发送HTML格式邮件测试类(支持中文)

    代码由纯Java写成,支持中文,一目了然,只要将Main函数中的相关信息填写正确就直接用了,便于修改,可以在此类基础上任意扩展成自己的类. 注意做HTML形式的邮件,最好把HTML,CSS都写全,只写 ...

  2. python测试开发django-29.发送html格式邮件

    前言 上一篇已经通过send_mail()函数发送纯文本的邮件,发送成功了,如果我们想发送一个html格式的邮件,如何实现呢? 发送html格式的邮件实际上还是调用send_mail()函数 ,只需多 ...

  3. EBS中使用JAVA方式发送HTML格式邮件

    转自huan.gu专栏:http://blog.csdn.net/gh320/article/details/17174769 EBS中使用JAVA方式发送HTML格式邮件 一.开发工具:JDevel ...

  4. 用多线程发送邮箱(一次给一个用户发送N封邮件)

    前台不用写,后台执行方法就可以了. namespace SendMail { public partial class SendMail_Page : System.Web.UI.Page { pro ...

  5. 通过C#发送自定义的html格式邮件

    要发送HTML格式邮件,需要设置MailMessage对象的IsBodyHtml属性,设置为true. 类MailMessage在命名空间System.Net.Mail下.using System.N ...

  6. MailUtils类:用于发送激活邮件

    该类用于发送激活邮件 package com.itheima.utils; import java.util.Properties; import javax.mail.Authenticator; ...

  7. ssl多人多附件多格式邮件发送

    package com.dfmy.util; import java.io.File; import java.security.Security; import java.util.ArrayLis ...

  8. [Java] JavaMail 发送 html 格式、带附件的邮件

    本案例演示发送 html 格式,可带附件的邮件发送.发送纯文本邮件的例子可参照上一篇博文JavaMail 简单案例. EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名 ...

  9. Cygwin 是一个用于 Windows 的类 UNIX shell 环境

    cygwin的安装使用   Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性:以及 ...

随机推荐

  1. uoj407 【IOI2018】狼人

    link 题意: 给一张n个点m条边的无向图,有q个询问,每次询问给出s,t,l,r,问你能否从s走到t,并且初始为人形,结束时必须为狼形,你是人形的时候必须避开$[1,l)$的节点,狼形的时候必须避 ...

  2. Alpha7

    难受

  3. [HDU6198]number number number

    题目大意: 给定一个数k表示你可以从包括0的斐波那契数列中任取k个数,得到它们的和.求最小的不能得到的自然数. 思路: 打表找规律,可以发现答案为f(2k+3)-1,然后用公式f(i)=f(i/2)* ...

  4. python开发_configparser_解析.ini配置文件工具_完整版_博主推荐

    # # 最近出了一趟差,是从20号去的,今天回来... # 就把最近学习的python内容给大家分享一下... # ''' 在python中,configparser模块提供了操作*.ini配置文件的 ...

  5. php中赋值和引用真真的理解

    php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...

  6. Go语言Web框架gwk介绍 (一)

    今天看到Golang排名到前30名了,看来关注的人越来越多了,接下来几天详细介绍Golang一个web开发框架GWK. 现在博客园支持markdown格式发布文章么?后台的编辑器不太好用嘛. GWK ...

  7. Android 5.0 源代码结构

    本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第2章,第2.2节分析Android源代码结构,作者 李骏. 网址:https://yq.aliyun.com/artic ...

  8. 使用Chrome快速实现数据的抓取(一)——概述

    对于一些简单的网页,我们可以非常容易的通过Develop Tool来获取其请求报文规律,并仿照其构建报文来获取页面信息.但是,随着网页越来越复杂,许多页面是由js动态渲染生成的.要获取这类信息,则需要 ...

  9. systemtap 用户态调试2

    [root@localhost ~]# cat user.stpprobe process(@1).function(@2){print_ubacktrace();exit();} session 1 ...

  10. python接口自动化24-有token的接口项目使用unittest框架设计

    获取token 在做接口自动化的时候,经常会遇到多个用例需要用同一个参数token,并且这些测试用例跨.py脚本了. 一般token只需要获取一次就行了,然后其它使用unittest框架的测试用例全部 ...