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

简介:

代码由纯Java写成,支持中文,一目了然,只要将Main函数中的相关信息填写正确就直接用了,便于修改,可以在此类基础上任意扩展成自己的类。

注意做HTML形式的邮件,最好把HTML,CSS都写全,只写一部分,不全,效果就不好看了。

邮件效果如图:


import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
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 javax.mail.internet.MimeUtility;

/**
 * 邮件发送测试类
 * 
 * 2013年9月25日18:12:54
 */
public class TestMailService{
    protected String smtpServer;
    protected String smtpUsername;
    protected String smtpPassword;
    protected String fromMailAddress;
    protected String toMailAddress;
    protected String ccMailAddress;
    protected String bccMailAddress;
    protected boolean testMode; 
    
    public boolean isTestMode() {
        return testMode;
    }

    public void setTestMode(boolean testMode) {
        this.testMode = testMode;
    }

    /**
     * 无参构造函数
     */
    public TestMailService(){
        
    }
    
    
    /**
     * 发送邮件的关键函数
     * 
     * @param title
     * @param content
     * @return
     * @throws Exception
     */
    protected 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));// 发件人
        
        // To收件人
        mimeMessage.setRecipients(Message.RecipientType.TO, getInternetAddressArr(toMailAddress));
        
        // Cc收件人
        InternetAddress[] arr=getInternetAddressArr(ccMailAddress);
        if(arr!=null && arr.length>0){
            mimeMessage.setRecipients(Message.RecipientType.CC, getInternetAddressArr(ccMailAddress));
        }
        
        // Bcc收件人
        arr=getInternetAddressArr(bccMailAddress);
        if(arr!=null && arr.length>0){
            mimeMessage.setRecipients(Message.RecipientType.BCC, getInternetAddressArr(bccMailAddress));
        }
        
        mimeMessage.setSubject(MimeUtility.encodeText(title,"gb2312","B"));
        mimeMessage.setSentDate(new Date());// 发送日期
        Multipart mp = new MimeMultipart("related");// related意味着可以发送html格式的邮件
        
        /** *************************************************** */
        BodyPart bodyPart = new MimeBodyPart();// 正文
        bodyPart.setDataHandler(new DataHandler(content,"text/html;charset=gb2312"));// 网页格式
        mp.addBodyPart(bodyPart);
        mimeMessage.setContent(mp);// 设置邮件内容对象
        Transport.send(mimeMessage);// 发送邮件
        
        
        return true;
    }
    
    /**
     * Mail地址转化
     * @param mialAddr
     * @return
     * @throws Exception
     */
    protected InternetAddress[] getInternetAddressArr(String mialAddr) throws Exception{
        if(mialAddr==null){
            return null;
        }
        
        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;
    }
    
    /**
     * 保留两位小数
     * @param s
     * @return
     */
    protected String getFormatted(String s){
        float f=Float.parseFloat(s);
        java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#0.00");  
        return df.format(f);
    }
    
    
    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;
    }
    
    public String getHTML(){
        StringBuilder sb=new StringBuilder();
        sb.append("    <html>");
        sb.append("     <head>");
        sb.append("      <title> New Document </title>");
        sb.append("     </head>");
        sb.append("    ");
        sb.append("    <style type=\"text/css\">");
        sb.append("    table { ");
        sb.append("      margin: 10px 0 30px 0;");
        sb.append("    }");
        sb.append("    ");
        sb.append("    table caption { ");
        sb.append("      text-align:left;");
        sb.append("    }");
        sb.append("    ");
        sb.append("    table tr th { ");
        sb.append("      background: #3B3B3B;");
        sb.append("      color: #FFF;");
        sb.append("      padding: 7px 4px;");
        sb.append("      text-align: left;");
        sb.append("    }");
        sb.append("    ");
        sb.append("    table tr td { ");
        sb.append("      color: #FFF;");
        sb.append("      padding: 7px 4px;");
        sb.append("      text-align: left;");
        sb.append("    }");
        sb.append("    ");
        sb.append("    table tr.odd{");
        sb.append("        background-color:#cef;");
        sb.append("    }");
        sb.append("    ");
        sb.append("    table tr.even{");
        sb.append("        background-color:#ffc;");
        sb.append("    }");
        sb.append("      ");
        sb.append("    table tr td { ");
        sb.append("      color: #47433F;");
        sb.append("      border-top: 1px solid #FFF;");
        sb.append("    }");
        sb.append("     </style>");
        sb.append("    ");
        sb.append("     <body>");
        sb.append("    <table style=\"width:300px; border-spacing:0;\">  ");
        sb.append("       <tr>  ");
        sb.append("          <th>A</th>  ");
        sb.append("          <th>B</th>  ");
        sb.append("          <th>C</th>  ");
        sb.append("          <th>D</th>  ");
        sb.append("          <th>E</th>  ");
        sb.append("       </tr>  ");
        sb.append("       <tr class=\"odd\">  ");
        sb.append("         <td>1</td>  ");
        sb.append("         <td>2</td>  ");
        sb.append("         <td>3</td>  ");
        sb.append("         <td>4</td>  ");
        sb.append("         <td>5</td>  ");
        sb.append("       </tr>  ");
        sb.append("       <tr class=\"even\">  ");
        sb.append("         <td>11</td>  ");
        sb.append("         <td>22</td>  ");
        sb.append("         <td>33</td>  ");
        sb.append("         <td>44</td>  ");
        sb.append("         <td>55</td>  ");
        sb.append("       </tr>  ");
        sb.append("       <tr class=\"odd\">  ");
        sb.append("         <td>111</td>  ");
        sb.append("         <td>222</td>  ");
        sb.append("         <td>333</td>  ");
        sb.append("         <td>444</td>  ");
        sb.append("         <td>555</td>  ");
        sb.append("       </tr>  ");
        sb.append("        <tr class=\"even\">  ");
        sb.append("         <td>你好</td>  ");
        sb.append("         <td>2222</td>  ");
        sb.append("         <td>3333</td>  ");
        sb.append("         <td>4444</td>  ");
        sb.append("         <td>5555</td>  ");
        sb.append("       </tr> ");
        sb.append("    </table> ");
        sb.append("     </body>");
        sb.append("    </html>");
        
        return sb.toString();
    }
    
    public static void main(String[] args) throws Exception{
        TestMailService s=new TestMailService();
        
        s.setSmtpServer("***.smtp.173.com");
        s.setSmtpUsername("***");
        s.setSmtpPassword("*****");
        s.setFromMailAddress("a@b.com");
        s.setToMailAddress("c@d.com");
                
        s.sendMail("测试邮件", s.getHTML());
    }    
}

 

要是感觉此类有问题,请留言。

《End》
















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/3339333.html,如需转载请自行联系原作者

相关文章
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
200 2
|
2月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
46 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
35 5
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
54 1
|
3月前
|
XML JavaScript Java
NekoHTML 是一个基于Java的HTML扫描器和标签补全器
**NekoHTML** 是一个基于Java的HTML扫描器和标签补全器(tag balancer),由J. Andrew Clark开发。它主要用于解析HTML文档,并能够“修正”许多在编写HTML文档过程中常犯的错误,如增补缺失的父元素、自动用结束标签关闭相应的元素,以及处理不匹配的内嵌元素标签等。这使得程序能够以标准的XML接口来访问HTML文档中的信息。 ### NekoHTML的主要特点包括: 1. **错误修正**:能够自动修正HTML中的常见错误,如未闭合的标签等。 2. **DOM树生成**:将HTML源代码转化为DOM(Document Object Model)结构,便
|
2月前
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
44 0
|
3月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
82 6
|
2月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
35 0
|
4月前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
68 2
|
4月前
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
121 1