日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java实现extended smtp_java实现发送邮件(SMTP)

發布時間:2025/3/11 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现extended smtp_java实现发送邮件(SMTP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.pom引入包

javax.mail

mail

1.4.7

2.Email實體類

import lombok.Data;

import lombok.EqualsAndHashCode;

import lombok.experimental.Accessors;

import java.util.List;

import java.util.Map;

/**

* @ClassName: Email

* @author: mxy

* @Description: Email的實體類

*/

@Data

@EqualsAndHashCode

@Accessors(chain = true)

public class Email {

/**

* 接收人列表 元素如"10*****787@qq.com"

*/

private List toList;

/**

* (可不填)抄送人列表 元素如"10*****787@qq.com"

*/

private List ccList;

/**

* (可不填)密送人列表 元素如"10*****787@qq.com"

*/

private List bccList;

/**

* (可不填)發送者昵稱

*/

private String fromName;

/**

* 發送人(郵箱賬號)

*/

private String from;

/**

* 密碼(騰訊郵箱為16位授權碼)

*/

private String password;

/**

* 郵件主機地址

*/

private String host;

/**

* (可不填)發信端口 默認465

*/

private String port="465";

/**

* 正文

*/

private String text;

/**

* 主題

*/

private String subject;

/**

* (可不填)附件

*/

private List fileList;

/**

* (可不填)要插入的圖片 正文需寫成html語言,如

* String text = "

HTML+附件+內嵌圖片的郵件測試!!!

"

* +"點擊跳轉"

* +"

LOGO圖標

"

* +"";

* Map imagesMap = new HashMap<>();

* imagesMap.put("logo","D:\\asf_logo_wide.gif");

*/

private Map imagesMap;

3.SendEmailUtils類(SMTP)

將email中的所需屬性值注入,調用sendSmtpEmail(email)即可,返回值為Boolean.

import com.bonc.industry.email.pojo.Email;

import com.sun.mail.util.MailSSLSocketFactory;

import lombok.extern.slf4j.Slf4j;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.*;

import javax.mail.internet.*;

import java.security.GeneralSecurityException;

import java.util.Date;

import java.util.Map;

import java.util.Properties;

/**

* @ClassName:sendEmail

* @author:mxy

* @Description: 發送郵件的工具類

*/

@Slf4j

public class SendEmailUtils {

//發送的主要類:涉及到"登錄郵箱"-"組裝郵件"-"發送".

public static Boolean sendSmtpEmail(Email email){

try {

Properties properties = getProperties(email);

//發送人名稱(為空則默認為發送賬戶)

Session session = getSession(properties, email);

session.setDebug(true);

//創建email

MimeMessage message = getMimeMessage(email, session);

Transport.send(message);

return true;

}catch (Exception e){

log.error("發送失敗:"+e.toString());

return false;

}

}

private static MimeMessage getMimeMessage(Email email, Session session) throws Exception {

MimeMessage message = new MimeMessage(session);

// 設置郵件的屬性

// 設置發件人

if (!email.getFromName().isEmpty()) {

// 自定義發件人昵稱

message.setFrom(new InternetAddress(MimeUtility.encodeText(email.getFromName()) + " "));

} else {

message.setFrom(new InternetAddress(email.getFrom()));

}

// 一對多發送:

// 構建一個群發地址數組(1對多)

InternetAddress[] adr = new InternetAddress[email.getToList().size()];

for (int i = 0; i < adr.length; i++) {

adr[i] = new InternetAddress(email.getToList().get(i));

}

// Message的setRecipients方法支持群發。 收件人

message.setRecipients(Message.RecipientType.TO, adr);

// 設置密送人

if (null!=email.getBccList()&&email.getBccList().size()>0) {

InternetAddress[] internetAddressBCC = new InternetAddress[email.getBccList().size()];

for (int i = 0; i < internetAddressBCC.length; i++) {

internetAddressBCC[i] = new InternetAddress(email.getBccList().get(i));

}

message.setRecipients(Message.RecipientType.BCC, internetAddressBCC);

}

// 設置抄送人

if (null!=email.getCcList()&&email.getCcList().size()>0) {

InternetAddress[] internetAddressCC = new InternetAddress[email.getCcList().size()];

for (int i = 0; i < internetAddressCC.length; i++) {

internetAddressCC[i] = new InternetAddress(email.getCcList().get(i));

}

message.setRecipients(Message.RecipientType.CC, internetAddressCC);

}

/*

* JavaMail API不限制信息只為文本,任何形式的信息都可能作MimeMessage的一部分.

* 除了文本信息,作為文件附件包含在電子郵件信息的一部分是很普遍的. JavaMail

* API通過使用DataHandler對象,提供一個允許我們包含非文本BodyPart對象的簡便方法.

*/

// 設置發生日期

message.setSentDate(new Date());

// 設置郵件的主題

message.setSubject(email.getSubject());

//創建用于組合郵件正文和附件的MimeMultipart對象

MimeMultipart mimeMultipart = new MimeMultipart("mixed");

// 創建郵件的正文

message.setText(email.getText(), "text/html;charset=gb2312");

// 設置HTML內容

MimeBodyPart content = createContent(email.getText(), email.getImagesMap());

mimeMultipart.addBodyPart(content);

// 創建附件

if(null!=email.getFileList()&&email.getFileList().size()>0){

for (String filePath:email.getFileList()){

MimeBodyPart attachmentPart = createAttachment(filePath);

mimeMultipart.addBodyPart(attachmentPart);

}

}

message.setContent(mimeMultipart);

message.saveChanges(); // 保存修改

return message;

}

public static MimeBodyPart createContent(String body, Map imagesMap) throws Exception {

/* 創建代表組合MIME消息的MimeMultipart對象和該對象保存到的MimeBodyPart對象 */

MimeBodyPart content = new MimeBodyPart();

// 創建一個MimeMultipart對象

MimeMultipart multipart = new MimeMultipart();

if (!body.isEmpty()) {

// 創建一個表示HTML正文的MimeBodyPart對象,并將它加入到前面的創建的MimeMultipart對象中

MimeBodyPart htmlBodyPart = new MimeBodyPart();

htmlBodyPart.setContent(body, "text/html;charset=UTF-8");

multipart.addBodyPart(htmlBodyPart);

}

if (imagesMap != null && !imagesMap.isEmpty()) {

for (Map.Entry entry: imagesMap.entrySet()) {

/* 創建一個表示圖片的MimeBodyPart對象,并將它加入到前面的創建的MimeMultipart對象中 */

MimeBodyPart pictureBodyPart = new MimeBodyPart();

// FileDataSource用于讀取文件數據,并返回代表數據的輸入輸出流和數據的MIME類型

FileDataSource fileDataSource = new FileDataSource(entry.getValue());

// DataHandler類用于封裝FileDataSource對象,并為應用程序提供訪問數據的接口

pictureBodyPart.setDataHandler(new DataHandler(fileDataSource));

pictureBodyPart.setContentID(entry.getKey());

multipart.addBodyPart(pictureBodyPart);

}

}

// 將MimeMultipart對象保存到MimeBodyPart對象中

content.setContent(multipart);

return content;

}

/**

* 在 JavaMail 中,可以通過 extends Authenticator 抽象類,在子類中覆蓋父類中的

* getPasswordAuthentication() 方法,就可以實現以不同的方式來進行登錄郵箱時的用戶身份認證。JavaMail

* 中的這種設計是使用了策略模式(Strategy

*/

public static Session getSession(Properties properties, Email email) {

return Session.getInstance(properties, new Authenticator() {

@Override

protected PasswordAuthentication getPasswordAuthentication() {

//設置發送帳號密碼

return new PasswordAuthentication(

email.getFrom(), email.getPassword());

}

});

}

/**

* JavaMail需要Properties來創建一個session對象。它將尋找字符串"mail.smtp.host",屬性值就是發送郵件的主機.

* @param email

* @return

* @throws GeneralSecurityException

*/

public static Properties getProperties(Email email) throws GeneralSecurityException {

Properties properties = new Properties();

// 設置發送主機

properties.setProperty("mail.host", email.getHost());

// 設置smtp方式

properties.setProperty("mail.transport.protocol", "smtp");

//設置發送端口

properties.setProperty("mail.smtp.port", email.getPort());

// 使用smtp身份驗證

properties.setProperty("mail.smtp.auth", "true");

//QQ存在一個特性設置SSL加密

MailSSLSocketFactory sf = new MailSSLSocketFactory();

sf.setTrustAllHosts(true);

properties.put("mail.smtp.ssl.enable", "true");

properties.put("mail.smtp.ssl.socketFactory", sf);

return properties;

}

/**

* 創建保存附件的MimeBodyPart對象,并且加入附件內容和相應的信息

* @param filepath

* @return

* @throws MessagingException

*/

public static MimeBodyPart createAttachment(String filepath) throws Exception{

MimeBodyPart attachmentPart = new MimeBodyPart();

FileDataSource fds = new FileDataSource(filepath);

attachmentPart.setDataHandler(new DataHandler(fds));

attachmentPart.setFileName(MimeUtility.encodeText(fds.getName()));

return attachmentPart;

}

}

總結

以上是生活随笔為你收集整理的java实现extended smtp_java实现发送邮件(SMTP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。