Java實(shí)現(xiàn)郵件發(fā)送功能
Java實(shí)現(xiàn)郵件發(fā)送的具體代碼,供大家參考,具體內(nèi)容如下
一、郵件服務(wù)器與傳輸協(xié)議
要在網(wǎng)絡(luò)上實(shí)現(xiàn)郵件功能,必須要有專門的郵件服務(wù)器。這些郵件服務(wù)器類似于現(xiàn)實(shí)生活中的郵局,它主要負(fù)責(zé)接收用戶投遞過來的郵件,并把郵件投遞到郵件接收者的電子郵箱中。
SMTP服務(wù)器地址:一般是 smtp.xxx.com,比如163郵箱是smtp.163.com,qq郵箱是smtp.qq.com。
SMTP協(xié)議
通常把處理用戶smtp請(qǐng)求(郵件發(fā)送請(qǐng)求)的服務(wù)器稱之為SMTP服務(wù)器(郵件發(fā)送服務(wù)器)。
POP3協(xié)議
通常把處理用戶pop3請(qǐng)求(郵件接收請(qǐng)求)的服務(wù)器稱之為POP3服務(wù)器(郵件接收服務(wù)器)。
二、Java發(fā)送郵件

使用到的jar包:
- mail.jar
- activation.jar
QQ郵箱需獲取相應(yīng)的權(quán)限:
QQ郵箱–>郵箱設(shè)置–>賬戶–>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù) 開啟POP3/SMTP服務(wù),然后獲取16位授權(quán)碼(注意不要將授權(quán)碼泄露,一個(gè)賬戶可以擁有多個(gè)授權(quán)碼)

Java實(shí)現(xiàn)純文本郵件發(fā)送
package org.westos.email;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;
public class SendEamil {
public static void main(String[] args) throws MessagingException, GeneralSecurityException {
//創(chuàng)建一個(gè)配置文件并保存
Properties properties = new Properties();
properties.setProperty("mail.host","smtp.qq.com");
properties.setProperty("mail.transport.protocol","smtp");
properties.setProperty("mail.smtp.auth","true");
//QQ存在一個(gè)特性設(shè)置SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
//創(chuàng)建一個(gè)session對(duì)象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("619046217@qq.com","16位授權(quán)碼");
}
});
//開啟debug模式
session.setDebug(true);
//獲取連接對(duì)象
Transport transport = session.getTransport();
//連接服務(wù)器
transport.connect("smtp.qq.com","619046217@qq.com","16位授權(quán)碼");
//創(chuàng)建郵件對(duì)象
MimeMessage mimeMessage = new MimeMessage(session);
//郵件發(fā)送人
mimeMessage.setFrom(new InternetAddress("619046217@qq.com"));
//郵件接收人
mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("875203654@qq.com"));
//郵件標(biāo)題
mimeMessage.setSubject("Hello Mail");
//郵件內(nèi)容
mimeMessage.setContent("我的想法是把代碼放進(jìn)一個(gè)循環(huán)里","text/html;charset=UTF-8");
//發(fā)送郵件
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
//關(guān)閉連接
transport.close();
}
}
Java實(shí)現(xiàn)文本圖片附件復(fù)雜的郵件發(fā)送
MIME(多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型)
MimeBodyPart類
javax.mail.internet.MimeBodyPart類 表示的是一個(gè)MIME消息,它和MimeMessage類一樣都是從Part接口繼承過來。
MimeMultipart類
javax.mail.internet.MimeMultipart是抽象類 Multipart的實(shí)現(xiàn)子類,它用來組合多個(gè)MIME消息。一個(gè)MimeMultipart對(duì)象可以包含多個(gè)代表MIME消息的MimeBodyPart對(duì)象
package org.westos.email;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.security.GeneralSecurityException;
import java.util.Properties;
public class SendComplexEmail {
public static void main(String[] args) throws GeneralSecurityException, MessagingException {
Properties prop = new Properties();
prop.setProperty("mail.host", "smtp.qq.com"); 設(shè)置QQ郵件服務(wù)器
prop.setProperty("mail.transport.protocol", "smtp"); // 郵件發(fā)送協(xié)議
prop.setProperty("mail.smtp.auth", "true"); // 需要驗(yàn)證用戶名密碼
// QQ郵箱設(shè)置SSL加密
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//1、創(chuàng)建定義整個(gè)應(yīng)用程序所需的環(huán)境信息的 Session 對(duì)象
Session session = Session.getDefaultInstance(prop, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//傳入發(fā)件人的姓名和授權(quán)碼
return new PasswordAuthentication("619046217@qq.com","16位授權(quán)碼");
}
});
//2、通過session獲取transport對(duì)象
Transport transport = session.getTransport();
//3、通過transport對(duì)象郵箱用戶名和授權(quán)碼連接郵箱服務(wù)器
transport.connect("smtp.qq.com","619046217@qq.com","16位授權(quán)碼");
//4、創(chuàng)建郵件,傳入session對(duì)象
MimeMessage mimeMessage = complexEmail(session);
//5、發(fā)送郵件
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
//6、關(guān)閉連接
transport.close();
}
public static MimeMessage complexEmail(Session session) throws MessagingException {
//消息的固定信息
MimeMessage mimeMessage = new MimeMessage(session);
//發(fā)件人
mimeMessage.setFrom(new InternetAddress("619046217@qq.com"));
//收件人
mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("619046217@qq.com"));
//郵件標(biāo)題
mimeMessage.setSubject("帶圖片和附件的郵件");
//郵件內(nèi)容
//準(zhǔn)備圖片數(shù)據(jù)
MimeBodyPart image = new MimeBodyPart();
DataHandler handler = new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\測(cè)試圖片.png"));
image.setDataHandler(handler);
image.setContentID("test.png"); //設(shè)置圖片id
//準(zhǔn)備文本
MimeBodyPart text = new MimeBodyPart();
text.setContent("這是一段文本<img src='cid:test.png'>","text/html;charset=utf-8");
//附件
MimeBodyPart appendix = new MimeBodyPart();
appendix.setDataHandler(new DataHandler(new FileDataSource("E:\\IdeaProjects\\WebEmail\\resources\\測(cè)試文件.txt")));
appendix.setFileName("test.txt");
//拼裝郵件正文
MimeMultipart mimeMultipart = new MimeMultipart();
mimeMultipart.addBodyPart(image);
mimeMultipart.addBodyPart(text);
mimeMultipart.setSubType("related");//文本和圖片內(nèi)嵌成功
//將拼裝好的正文內(nèi)容設(shè)置為主體
MimeBodyPart contentText = new MimeBodyPart();
contentText.setContent(mimeMultipart);
//拼接附件
MimeMultipart allFile = new MimeMultipart();
allFile.addBodyPart(appendix);//附件
allFile.addBodyPart(contentText);//正文
allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有類型設(shè)置為mixed
//放到Message消息中
mimeMessage.setContent(allFile);
mimeMessage.saveChanges();//保存修改
return mimeMessage;
}
}
JavaWeb發(fā)送郵件(網(wǎng)站注冊(cè)成功發(fā)送提示郵件)
1.User
package org.westos.mail;
public class User {
private String name;
private String password;
private String mail;
public User() {
}
public User(String name, String password, String mail) {
this.name = name;
this.password = password;
this.mail = mail;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", mail='" + mail + '\'' +
'}';
}
}
2.Servlet
package org.westos.mail;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Servlet extends javax.servlet.http.HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
//處理前端請(qǐng)求
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
//將信息封裝進(jìn)user對(duì)象
User user = new User(username, password, email);
SendMail sendMail = new SendMail(user);
sendMail.start(); //開啟線程
request.setAttribute("msg","發(fā)送成功");
try {
request.getRequestDispatcher("msg.jsp").forward(request,response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.SengMail
package org.westos.mail;
import com.sun.mail.util.MailSSLSocketFactory;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.security.PublicKey;
import java.util.Properties;
public class SendMail extends Thread {
//發(fā)件人信息
private String From = "619046217@qq.com";
//發(fā)件人郵箱
private String recipient = "619046217@qq.com";
//郵箱密碼
private String password = "16位授權(quán)碼";
//郵件發(fā)送的服務(wù)器
private String host = "smtp.qq.com";
//收件人信息
private User user;
public SendMail(User user){
this.user = user;
}
@Override
public void run() {
try {
Properties properties = new Properties();
properties.setProperty("mail.host","smtp.qq.com");
properties.setProperty("mail.transport.protocol","smtp");
properties.setProperty("mail.smtp.auth","true");
//QQ存在一個(gè)特性設(shè)置SSL加密
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
//創(chuàng)建一個(gè)session對(duì)象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(recipient,password);
}
});
//開啟debug模式
session.setDebug(true);
//獲取連接對(duì)象
Transport transport = null;
try {
transport = session.getTransport();
} catch (NoSuchProviderException e) {
e.printStackTrace();
}
//連接服務(wù)器
transport.connect(host,From,password);
//創(chuàng)建一個(gè)郵件發(fā)送對(duì)象
MimeMessage mimeMessage = new MimeMessage(session);
//郵件發(fā)送人
mimeMessage.setFrom(new InternetAddress(recipient));
//郵件接收人
mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getMail()));
//郵件標(biāo)題
mimeMessage.setSubject("網(wǎng)站注冊(cè)成功");
//郵件內(nèi)容
mimeMessage.setContent("網(wǎng)站注冊(cè)成功,密碼為"+user.getPassword()+",請(qǐng)妥善保管密碼","text/html;charset=UTF-8");
//發(fā)送郵件
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
transport.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
4.register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注冊(cè)頁面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/a.do" method="post">
<p>用戶名:<input type="text" name="username" required></p>
<p>密碼:<input type="password" name="password" required></p>
<p>郵箱:<input type="email" name="email" required></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</html>
5.msg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
6.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>org.westos.mail.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/a.do</url-pattern>
</servlet-mapping>
</web-app>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java郵件發(fā)送程序(可以同時(shí)發(fā)給多個(gè)地址、可以帶附件)
- Java HtmlEmail 郵件發(fā)送的簡(jiǎn)單實(shí)現(xiàn)代碼
- 基于JavaMail的Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能
- Java實(shí)現(xiàn)帶附件的郵件發(fā)送功能
- JavaWeb實(shí)現(xiàn)郵件發(fā)送接收功能
- Java實(shí)現(xiàn)郵件發(fā)送遇到的問題
- java郵件發(fā)送的實(shí)現(xiàn)
- java郵件發(fā)送簡(jiǎn)單實(shí)現(xiàn)代碼
- JavaMail實(shí)現(xiàn)郵件發(fā)送的方法
- Java實(shí)現(xiàn)簡(jiǎn)單郵件發(fā)送功能
相關(guān)文章
基于SpringBoot實(shí)現(xiàn)QQ郵箱驗(yàn)證碼注冊(cè)功能
QQ 郵箱是由騰訊公司推出的一款免費(fèi)郵箱服務(wù),它提供了完整的郵件發(fā)送和接收功能,并且還支持多種郵件格式和附件類型,QQ 郵箱還具有強(qiáng)大的反垃圾郵件功能,可以有效地過濾垃圾郵件,并保護(hù)用戶隱私和安全,所以本文給大家介紹了基于SpringBoot實(shí)現(xiàn)QQ郵箱驗(yàn)證碼注冊(cè)功能2024-11-11
SSM如何實(shí)現(xiàn)在Controller中添加事務(wù)管理
這篇文章主要介紹了SSM如何實(shí)現(xiàn)在Controller中添加事務(wù)管理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開發(fā)環(huán)境搭建圖文
這篇文章主要介紹了struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25開發(fā)環(huán)境搭建圖文教程,感興趣的小伙伴們可以參考一下2016-06-06
Spring?Boot?Actuator?漏洞利用小結(jié)
spring對(duì)應(yīng)兩個(gè)版本,分別是Spring Boot 2.x和Spring Boot 1.x,因此后面漏洞利用的payload也會(huì)有所不同,這篇文章主要介紹了Spring?Boot?Actuator?漏洞利用小結(jié),需要的朋友可以參考下2023-11-11
使用jpa之動(dòng)態(tài)插入與修改(重寫save)
這篇文章主要介紹了使用jpa之動(dòng)態(tài)插入與修改(重寫save),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring的編程式事務(wù)TransactionTemplate的用法詳解
TransactionTemplate提供了一種在代碼中進(jìn)行編程式事務(wù)管理的方式,使開發(fā)人員能夠在方法級(jí)別定義事務(wù)的開始和結(jié)束點(diǎn),本文介紹了Spring框架中TransactionTemplate的用法,感興趣的朋友跟隨小編一起看看吧2023-07-07
SpringBoot yaml語法與JRS303校驗(yàn)超詳細(xì)講解
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標(biāo)記語言)的遞歸縮寫。在開發(fā)的這種語言時(shí),YAML 的意思其實(shí)是:“Yet Another Markup Language”(仍是一種標(biāo)記語言),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10

