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郵件服務) API詳解JavaAIAPI
- javamail郵件傳送例子JavaAI
- 使用JavaMail傳送郵件JavaAI
- javamail傳送郵件(轉)JavaAI
- JavaMail:java使用QQ郵箱傳送郵件簡單版。JavaAI
- 郵件開發:Javamail、JAF簡介JavaAI
- 使用JavaMail實現收取和回覆郵件JavaAI
- JavaMail傳送郵件時常見錯誤JavaAI
- Springboot+Javamail實現郵件傳送Spring BootJavaAI
- 【知識積累】JavaMail實現發郵件功能JavaAI
- 郵件開發:Tomcat中JavaMail支援與衝突TomcatJavaAI
- JavaMail 保證郵件傳送成功的方法總結JavaAI
- JSP與JavaMail(4)---傳送HTML格式的郵件 (轉)JSJavaAIHTML
- 求救:學習用JAVAMAIL編的郵件系統出問題了!JavaAI
- java郵件傳送Java
- java傳送郵件Java
- Java實現QQ郵件傳送郵件工具類Java
- 用javamail顯示覆合郵件的內容的親身體會 (轉)JavaAI
- JSP與JavaMail(6)---編寫靈活的郵件傳送程式 (轉)JSJavaAI
- Jboss3.0-Tomcat4.03下運用JavaMail發電子郵件. (轉)S3TomcatJavaAI
- JSP與JavaMail(3)---試著寫第一個郵件傳送程式 (轉)JSJavaAI
- Java郵件(問題解決)Java
- Java 實現郵件的接收Java
- Java郵件群發(web版)JavaWeb
- Java傳送郵件初窺Java
- Java郵件傳送帶附件Java
- Java實現郵件推送功能Java
- 請教:如何解決JAVAMAIL傳送html格式郵件時的亂碼問題JavaAIHTML
- benq,漿糊,以及各位大哥,你們是否用javamail做過收郵件的程式???ENQJavaAI
- Java Mail 郵件傳送(二):簡單封裝的郵件傳送JavaAI封裝
- JavaMail郵件傳送在linux環境下不能傳送的問題解決JavaAILinux
- java抓取網頁的郵件地址Java網頁
- java 傳送郵件Commons MailJavaAI
- 郵件營銷用純文字郵件還是html郵件HTML
- 郵件開發:接收解析郵件
- JavaMail學習筆記(四)、使用POP3協議接收並解析電子郵件(全)JavaAI筆記協議
- JavaMail 郵件傳送,有意思的附件名亂碼 → 客戶端正常,web端亂碼JavaAI客戶端Web
- Java實現網易企業163郵箱傳送郵件Java