Java HtmlEmail 郵件發(fā)送的簡單實(shí)現(xiàn)代碼
Java 項(xiàng)目中常?;赜龅桨l(fā)送郵件
Java 發(fā)送郵件有幾種,今天先給大家介紹用 HtmlEmail 來發(fā)送郵件,我這里是用 Maven 來搭建的
HtmlEmail 可以抄帶HTML
首先 需要導(dǎo)入jar 包
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dependency>
然后我們來建立一個(gè)發(fā)送郵件的 Mail 類 JavaBean
public class Mail implements Serializable{
private static final long serialVersionUID = -6390720891150157552L;
public static final String ENCODEING = "UTF-8";
// 服務(wù)器地址
private String host;
// 發(fā)件人的郵箱
private String sender;
// 發(fā)件人昵稱
private String name;
// 賬號(hào)
private String username;
// 密碼
private String password;
// 收件人的郵箱
private String receiver;
// 收件人的名稱
private String receiverName;
// 收件人的郵箱(key)和名稱(value)
private Map<String, String> to;
// 抄送人的郵箱(key)和名稱(value)
private Map<String, String> cc;
// 秘密抄送人的郵箱(key)和名稱(value)
private Map<String, String> bcc;
// 主題
private String subject;
// 信息(支持HTML)
private String message;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getReceiverName() {
return receiverName;
}
public void setReceiverName(String receiverName) {
this.receiverName = receiverName;
}
public Map<String, String> getTo() {
return to;
}
public void setTo(Map<String, String> to) {
this.to = to;
}
public Map<String, String> getCc() {
return cc;
}
public void setCc(Map<String, String> cc) {
this.cc = cc;
}
public Map<String, String> getBcc() {
return bcc;
}
public void setBcc(Map<String, String> bcc) {
this.bcc = bcc;
}
}
然后再來創(chuàng)建一個(gè)發(fā)送郵件的工具類 MailUtil
public class MailUtil {
public Boolean send(Mail mail){
HtmlEmail email = new HtmlEmail();
try {
// 這里是SMTP發(fā)送服務(wù)器的名字:163的如下:"smtp.163.com"
email.setHostName(mail.getHost());
// 字符編碼集的設(shè)置
email.setCharset(Mail.ENCODEING);
// 發(fā)送人的郵箱
email.setFrom(mail.getSender(), mail.getName());
// 如果需要認(rèn)證信息的話,設(shè)置認(rèn)證:用戶名-密碼。分別為發(fā)件人在郵件服務(wù)器上的注冊(cè)名稱和密碼
email.setAuthentication(mail.getUsername(), mail.getPassword());
// 設(shè)置收件人信息
setTo(email, mail);
// 設(shè)置抄送人信息
setCc(email, mail);
// 設(shè)置密送人信息
setBcc(email, mail);
// 要發(fā)送的郵件主題
email.setSubject(mail.getSubject());
// 要發(fā)送的信息,由于使用了HtmlEmail,可以在郵件內(nèi)容中使用HTML標(biāo)簽
email.setHtmlMsg(mail.getMessage());
// 發(fā)送
email.send();
if (Log.isDebugEnabled()) {
Log.info(mail.getSender() + " 發(fā)送郵件到 " + mail.getReceiver());
}
return true;
} catch (Exception e) {
e.printStackTrace();
Log.info(mail.getSender() + " 發(fā)送郵件到 " + mail.getReceiver() + " 失敗");
return false;
}
}
/**
* 設(shè)置收件人信息
*
* @param email
* @param mail
* @throws EmailException
*/
private void setTo(HtmlEmail email, Mail mail) throws EmailException{
// 收件人不為空
if (StringUtils.isNotEmpty(mail.getReceiver())) {
// 收件人名稱不為空
if (StringUtils.isNotEmpty(mail.getReceiverName())) {
email.addTo(mail.getReceiver(), mail.getReceiverName());
} else {
email.addTo(mail.getReceiver());
}
}
// 收件人 Map 不為空
if (mail.getTo() != null) {
for (Map.Entry<String, String> entry : mail.getTo().entrySet()) {
// 收件人名稱不為空
if (StringUtils.isNotEmpty(entry.getValue())) {
email.addTo(entry.getKey(), entry.getValue());
} else {
email.addTo(entry.getKey());
}
}
}
}
/**
* 設(shè)置抄送人信息
*
* @param email
* @param mail
* @throws EmailException
*/
private void setCc(HtmlEmail email, Mail mail) throws EmailException{
// 抄送人 Map 不為空
if (mail.getCc() != null) {
for (Map.Entry<String, String> entry : mail.getCc().entrySet()) {
// 抄送人名稱不為空
if (StringUtils.isNotEmpty(entry.getValue())) {
email.addCc(entry.getKey(), entry.getValue());
} else {
email.addCc(entry.getKey());
}
}
}
}
/**
* 設(shè)置密送人信息
*
* @param email
* @param mail
* @throws EmailException
*/
private void setBcc(HtmlEmail email, Mail mail) throws EmailException{
// 密送人 Map 不為空
if (mail.getBcc() != null) {
for (Map.Entry<String, String> entry : mail.getBcc().entrySet()) {
// 密送人名稱不為空
if (StringUtils.isNotEmpty(entry.getValue())) {
email.addBcc(entry.getKey(), entry.getValue());
} else {
email.addBcc(entry.getKey());
}
}
}
}
}
寫到這里,大概也就差不多了,萬里長征只有最后一步了
測(cè)試,測(cè)試,測(cè)試
這里編寫一個(gè) junit 方法來測(cè)試
@Test
public void sendMail(){
Mail mail = new Mail();
// 設(shè)置郵件服務(wù)器
mail.setHost("smtp.exmail.qq.com");
// 發(fā)件人郵件地址
mail.setSender("chenhao@kezhanbang.cn");
// 發(fā)件人名稱
mail.setName("Java.小學(xué)生");
// 登錄賬號(hào),一般都是和郵箱名一樣吧
mail.setUsername("chenhao@kezhanbang.cn");
// 發(fā)件人郵箱的登錄密碼
mail.setPassword("xxxxxxxx");
// 接收人
mail.setReceiver("huntertochen@163.com");
mail.setReceiverName("我要女票");
mail.setSubject("萬里長征最后一步測(cè)試");
String html = "<!DOCTYPE html>";
html += "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">";
html += "<title>Insert title here</title>";
html += "</head><body>";
html += "<div style=\"width:600px;height:400px;margin:50px auto;\">";
html += "<h1>我來看看郵件是否發(fā)送成功呢</h1><br/><br/>";
html += "<p>下面是通過該協(xié)議可以創(chuàng)建一個(gè)指向電子郵件地址的超級(jí)鏈接,通過該鏈接可以在Internet中發(fā)送電子郵件</p><br/>";
html += "<a href=\"mailto:huntereagle@foxmail.com?subject=test&cc=huntertochen@163.com&body=use mailto sample\">send mail</a>";
html += "</div>";
html += "</body></html>";
mail.setMessage(html);
new MailUtil().send(mail);
}
趕緊登錄郵箱看看吧

來看看這里 主題 內(nèi)容,發(fā)送人名稱和收件人名稱是否和代碼寫的一樣呢,如果一樣的話,恭喜你成功啦
到這,其實(shí)發(fā)送郵件就算完了!?。?/p>
這里在啰嗦最后一個(gè)小知識(shí)點(diǎn) mailto
mailto: 通過該協(xié)議可以創(chuàng)建一個(gè)指向電子郵件地址的超級(jí)鏈接,通過該鏈接可以在Internet中發(fā)送電子郵件
我們點(diǎn)擊 send mail 會(huì)打開你郵件客戶端一個(gè)發(fā)送界面,如果你有寫抄帶信息,也會(huì)給你帶上

以上這篇Java HtmlEmail 郵件發(fā)送的簡單實(shí)現(xiàn)代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis如何通過接口實(shí)現(xiàn)sql執(zhí)行原理解析
為了簡化MyBatis的使用,MyBatis提供了接口方式自動(dòng)化生成調(diào)用過程,可以大大簡化MyBatis的開發(fā),下面這篇文章主要給大家介紹了關(guān)于Mybatis如何通過接口實(shí)現(xiàn)sql執(zhí)行原理解析的相關(guān)資料,需要的朋友可以參考下2023-01-01
Intellij?IDEA?的maven項(xiàng)目通過Java代碼實(shí)現(xiàn)Jetty的Http服務(wù)器(推薦)
Jetty是一個(gè)輕量級(jí)的高度可擴(kuò)展的基于 java的web服務(wù)器和servlet引擎,這篇文章主要介紹了Intellij?IDEA?的maven項(xiàng)目通過Java代碼實(shí)現(xiàn)?Jetty?的?Http服務(wù)器從而獲取到 Http 的 Get 和 Post 請(qǐng)求,需要的朋友可以參考下2022-07-07
基于java TCP網(wǎng)絡(luò)通信的實(shí)例詳解
本篇文章是對(duì)java中TCP網(wǎng)絡(luò)通信的實(shí)例進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
實(shí)例講解Java設(shè)計(jì)模式編程中的OCP開閉原則
這篇文章主要介紹了Java設(shè)計(jì)模式編程中的開閉原則,開閉原則的大意被作者總結(jié)為用抽象構(gòu)建框架,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié),需要的朋友可以參考下2016-02-02
JSON.toJSONString()方法在Java中的使用方法及應(yīng)用場(chǎng)景
這篇文章主要給大家介紹了關(guān)于JSON.toJSONString()方法在Java中的使用方法及應(yīng)用場(chǎng)景,JSON.toJSONString是將對(duì)象轉(zhuǎn)化為Json字符串,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04

