Java郵件(JavaMail)
Java 郵件(JavaMail)
- 建立MailSenderInfo Bean,用來儲存郵件使用的基本資訊。
/**
* 1. 傳送郵件需要使用的基本資訊
* @author mazaiting
*/
public class MailSenderInfo {
/** 傳送郵件的伺服器ip */
private String mailServerHost;
/** 傳送郵件的伺服器埠 */
private String mailServerPort = "25";
/** 郵件傳送者的地址 */
private String fromAddress;
/** 郵件接收者的地址 */
private String toAddress;
/** 登入郵件傳送伺服器的使用者名稱 */
private String username;
/** 登入郵件傳送伺服器的密碼 --授權密碼*/
private String password;
/** 是否需要身份驗證 */
private boolean isValidate = false;
/** 郵件主題 */
private String subject;
/** 郵件文字內容 */
private String content;
/** 郵件附件的檔案 */
private List<File> fileList;
/**
* 獲得郵件會話屬性
* @throws GeneralSecurityException 證照安全異常
*/
public Properties getProperties() throws GeneralSecurityException {
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", isValidate ? "true" : "false");
// 進行證照驗證
MailSSLSocketFactory mssf = new MailSSLSocketFactory();
mssf.setTrustAllHosts(true);
p.put("mail.smtp.ssl.enable", true);
p.put("mail.smtp.ssl.socketFactory", mssf);
return p;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
this.mailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
this.mailServerPort = mailServerPort;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
}
public String getToAddress() {
return toAddress;
}
public void setToAddress(String toAddress) {
this.toAddress = toAddress;
}
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 boolean isValidate() {
return isValidate;
}
public void setValidate(boolean isValidate) {
this.isValidate = isValidate;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public List<File> getFileList() {
return fileList;
}
public void setFileList(List<File> fileList) {
this.fileList = fileList;
}
}
- 密碼驗證管理
/**
* 2. 簡單的驗證管理
* @author mazaiting
*/
public class SimpleAuthenticator extends Authenticator{
/**使用者名稱*/
private String username = null;
/**密碼*/
private String password = null;
public SimpleAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
- 實現簡單郵件伺服器
/**
* 3. 簡單郵件
* @author mazaiting
*/
public class SimpleMailServer {
/**
* 以文字格式傳送郵件
* @param mailInfo 待傳送的郵件資訊
* @return true 傳送成功; false 傳送不成功
*/
public boolean sendTextMail(MailSenderInfo mailInfo) {
try {
// 判斷是否需要身份驗證
SimpleAuthenticator authenticator = null;
Properties properties = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份驗證, 則建立一個密碼驗證器
authenticator = new SimpleAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());
}
// 根據郵件會話屬性和密碼驗證器構造一個傳送郵件的Session
Session sendMailSession = Session.getDefaultInstance(properties, authenticator);
// 根據Session建立一個郵件資訊
Message mailMessage = new MimeMessage(sendMailSession);
// 建立郵件傳送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 設定郵件訊息的傳送者
mailMessage.setFrom(from);
// 建立郵件的接收者地址,並設定到郵件訊息中
Address to = new InternetAddress(mailInfo.getToAddress());
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 設定郵件訊息的主題
mailMessage.setSubject(mailInfo.getSubject());
// 設定郵件訊息傳送時間
mailMessage.setSentDate(new Date());
// 設定郵件訊息的主要內容
String mailContent = mailInfo.getContent();
mailMessage.setText(mailContent);
// 傳送郵件
Transport.send(mailMessage);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 以HTML格式傳送郵件
*
* @param mailInfo
* 待傳送的郵件
* @return true 傳送成功; false 傳送失敗。
*/
public boolean sendHtmlMail(MailSenderInfo mailInfo) {
try {
// 判斷是否需要身份認證
SimpleAuthenticator authenticator = null;
Properties properties = mailInfo.getProperties();
// 如果需要身份認證, 則建立一個密碼驗證器
if (mailInfo.isValidate()) {
authenticator = new SimpleAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());
}
// 根據郵件會話屬性和密碼驗證器構造一個傳送郵件的Session
Session sendMailSession = Session.getDefaultInstance(properties, authenticator);
// 根據Session建立一個郵件訊息
Message mailMessage = new MimeMessage(sendMailSession);
// 建立郵件傳送者地址
Address from = new InternetAddress(mailInfo.getFromAddress());
// 設定郵件訊息的傳送者
mailMessage.setFrom(from);
// 建立郵件的接收者地址, 並設定到郵件訊息中
Address to = new InternetAddress(mailInfo.getToAddress());
// Message.RecipientType.TO屬性表示接收者的型別為TO
mailMessage.setRecipient(Message.RecipientType.TO, to);
// 設定郵件訊息的主題
mailMessage.setSubject(mailInfo.getSubject());
// 設定郵件訊息傳送的時間
mailMessage.setSentDate(new Date());
// MiniMultipart類是一個容器,包含MimeBodyPart型別的物件
Multipart mainPart = new MimeMultipart();
if (null != mailInfo.getContent()) {
setContent(mailInfo, mainPart);
}
if (null != mailInfo.getFileList() && mailInfo.getFileList().size() > 0) {
addAttachment(mailInfo.getFileList(), mainPart);
}
// 將MiniMultipart物件設定為郵件內容
mailMessage.setContent(mainPart);
// 傳送郵件
Transport.send(mailMessage);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 設定內容
* @param mailInfo 郵件資訊
* @param mainPart 容器
* @throws MessagingException 訊息異常
*/
public void setContent(MailSenderInfo mailInfo, Multipart mainPart) throws MessagingException {
// 建立一個包含HTML內容的MimeBodyPart
BodyPart textContent = new MimeBodyPart();
// 設定HTML內容
textContent.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
mainPart.addBodyPart(textContent);
}
/**
* 新增附件
* @param filePath 檔案路徑
* @param fileName 檔名
* @param mainPart 容器
* @throws MessagingException 訊息異常
*/
public void addAttachment(List<File> fileList, Multipart mainPart) throws MessagingException{
for (int i = 0; i < fileList.size(); i++){
File file = fileList.get(i);
BodyPart fileContent = new MimeBodyPart();
DataSource source = new FileDataSource(file.getAbsolutePath());
fileContent.setDataHandler(new DataHandler(source));
fileContent.setFileName(file.getName());
mainPart.addBodyPart(fileContent);
}
}
}
- 主函式使用
public class Client {
public static void main(String[] args) {
// 設定郵件
MailSenderInfo mailInfo = new MailSenderInfo();
// 設定伺服器主機名
mailInfo.setMailServerHost("smtp.qq.com");
// 設定伺服器埠
mailInfo.setMailServerPort("465");
// 設定密碼驗證
mailInfo.setValidate(true);
// 設定使用者名稱
mailInfo.setUsername("1449689807@qq.com");
// 設定登入驗證需要的密碼
mailInfo.setPassword("****************");// 設定為自己的驗證密碼
// 設定傳送者地址
mailInfo.setFromAddress("1449689807@qq.com");
// 設定接收者地址
mailInfo.setToAddress("1425941077@qq.com");
// 設定郵件標題
mailInfo.setSubject("郵件標題");
// 設定郵件內容
mailInfo.setContent("郵件內容");
// 設定郵件攜帶的附件
// List<File> fileList = new ArrayList<>();
// fileList.add(new File("C:\Users\Administrator\Desktop\password.png"));
// mailInfo.setFileList(fileList);
// 傳送郵件
SimpleMailServer sms = new SimpleMailServer();
// sms.sendTextMail(mailInfo);// 傳送文字格式
sms.sendHtmlMail(mailInfo);// 傳送html格式
}
}
-
遇到的問題
檢視詳情 -
Android 使用Javamail傳送郵件時,要將第一步中的getProperties()函式更改為如下內容:
/**
* 獲得郵件會話屬性
* @throws GeneralSecurityException 證照安全異常
*/
Properties getProperties() throws GeneralSecurityException {
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
Properties p = new Properties();
p.put("mail.smtp.host", this.mailServerHost);
p.put("mail.smtp.port", this.mailServerPort);
p.put("mail.smtp.auth", isValidate ? "true" : "false");
// 進行證照驗證
MailSSLSocketFactory mssf = new MailSSLSocketFactory();
mssf.setTrustAllHosts(true);
p.put("mail.smtp.ssl.enable", true);
p.put("mail.smtp.ssl.socketFactory", mssf);
return p;
}
其中需要activation.jar,點選下載。或者Gradle直接依賴compile `com.sun.mail:android-mail:1.6.0`
,使用Gradle依賴之後,之前用到的mail.jar與此處用到的activation.jar都必須要刪除,否則會重複編譯jar。
相關文章
- JavaMail:java使用QQ郵箱傳送郵件簡單版。JavaAI
- 使用JavaMail實現收取和回覆郵件JavaAI
- Springboot+Javamail實現郵件傳送Spring BootJavaAI
- java郵件傳送Java
- Java實現郵件推送功能Java
- JavaMail 郵件傳送,有意思的附件名亂碼 → 客戶端正常,web端亂碼JavaAI客戶端Web
- Java Mail 郵件傳送(二):簡單封裝的郵件傳送JavaAI封裝
- 郵件營銷用純文字郵件還是html郵件HTML
- javamailJavaAI
- java 如何實現傳送郵件 email?JavaAI
- Java實現網易企業163郵箱傳送郵件Java
- Java Mail 郵件傳送(一):入門DemoJavaAI
- Java實現QQ郵件傳送客戶端Java客戶端
- javamail參考JavaAI
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- JAVA 資料寫入excel併傳送郵件JavaExcel
- 一次性解決python smtp 傳送outlook郵件,163郵件,qq郵件等等.Python
- Laravel 郵件配置Laravel
- 郵件傳送
- 群發郵件
- 傳送郵件
- linux 發郵件Linux
- 電子郵件
- 電子郵件協議及GO傳送QQ郵件協議Go
- golang傳送郵件(qq郵箱)Golang
- win10郵件怎麼用qq郵箱 win10郵件如何使用qq郵箱Win10
- Java傳送郵件必帶超時時間配置Java
- 用 vscode 配置 java 開發環境發 qq 郵件VSCodeJava開發環境
- 關閉:您在 /var/spool/mail/root 中有郵件提醒,清除郵件AI
- CACTER郵件安全共建網路安全315:保護郵件系統,從處理emotet病毒郵件開始!
- swoole 郵件系統
- Laravel-郵件通知Laravel
- python傳送郵件Python
- Django——郵件傳送Django
- gmail傳送郵件AI
- shell郵件功能-2
- phpcms傳送郵件PHP
- 郵件的傳送
- 使用 OfflineIMAP 同步郵件