用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》
用Java发送HTML格式邮件测试类(支持中文)的更多相关文章
- 一个用于发送HTML格式邮件的类
以下类是在网上孙钰佳的版本上改写而来,主要变化了三点:1.去掉了附件部分:2.形式从纯Java类改成可注入方式:3.to,cc和bcc都变成了一堆人,以前是一个人. 以下是Java类的代码: impo ...
- EBS中使用JAVA方式发送HTML格式邮件
转自huan.gu专栏:http://blog.csdn.net/gh320/article/details/17174769 EBS中使用JAVA方式发送HTML格式邮件 一.开发工具:JDevel ...
- python测试开发django-29.发送html格式邮件
前言 上一篇已经通过send_mail()函数发送纯文本的邮件,发送成功了,如果我们想发送一个html格式的邮件,如何实现呢? 发送html格式的邮件实际上还是调用send_mail()函数 ,只需多 ...
- JAVA 发送各种邮箱邮件 javamail
QQ邮箱 /** * 单条发送 * @param mail 邮件对象,包含发送人.邮件主题.邮件内容 * @param recipients 收件人 * @throws AddressExceptio ...
- java发送soapui格式的报文
import java.io.*;import java.net.HttpURLConnection;import java.net.URL; 使用java对soapui报文进行发送 public c ...
- Java连接MQ的实例, 测试类
package cjf.mq.mqclient; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.M ...
- JAVA发送xml格式的接口请求
/** * * @param urlStr 接口地址 * @param xmlInfo xml格式参数数据 * @return */ public static String sendMsgXml(S ...
- Java导包后在测试类中执行正确但在Servlet中执行错误报ClassNotFoundException或者ClassDefNotFoundException解决办法
将原来导的包remove from build path,并复制到Web-root下的lib目录中,再add to build path,
- 通过C#发送自定义的html格式邮件
要发送HTML格式邮件,需要设置MailMessage对象的IsBodyHtml属性,设置为true. 类MailMessage在命名空间System.Net.Mail下.using System.N ...
随机推荐
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
- Vue-router浅识
一.router-link及router-view :用来做导航,通过传入to属性来指定链接 :用来做路由出口,路由匹配到的组件都会渲染在这里 const router = new VueRouter ...
- python开发_thread_线程基础
说到线程,我们要知道啥是串行,啥是并行程序 举个例子: 串行程序,就是一个一个的执行程序 #python threading import time ''' 每一秒中,输出:this is a dem ...
- 嵌入式设备hacking(转)
原帖地址:http://drops.wooyun.org/papers/5157 0x00 IPCAM hacking TOOLS github-binwalk firmware-mod-kit ID ...
- saga中的saga(A Saga on Sagas)
此文翻译自msdn,侵删. 原文地址:https://msdn.microsoft.com/en-us/library/jj591569.aspx Process Managers, Coordina ...
- JS仿淘宝左侧菜单
http://www.webdm.cn/webcode/1c724a06-06f4-4c4f-931a-c683285fa700.html
- Geeks 一般二叉树的LCA
不是BST,那么搜索两节点的LCA就复杂点了,由于节点是无序的. 以下是两种方法,都写进一个类里面了. 当然须要反复搜索的时候.能够使用多种方法加速搜索. #include <iostream& ...
- MVC使用JCrop上传、裁剪图片
JCrop用来裁剪图片,本篇想体验的是: 在视图页上传图片: 上传成功,跳转到另外一个编辑视图页,使用JCrop对该图片裁剪,并保存图片到指定文件夹: 裁剪成功后,在主视图页显示裁剪图片: 当然,实际 ...
- CAS工作流程
CAS3.0的工作流程: 0.app将用户转发到CAS处, 并将自己的url作为callback参数传给CAS. 1.CAS验证用户成功(authentication) 2.生成用户实体(princi ...
- Android NDK开发篇(五):Java与原生代码通信(数据操作)
尽管说使用NDK能够提高Android程序的运行效率,可是调用起来还是略微有点麻烦.NDK能够直接使用Java的原生数据类型,而引用类型,由于Java的引用类型的实如今NDK被屏蔽了,所以在NDK使用 ...