下邊是我寫的一個mailTest的類實現(xiàn)。親測有效;
這里是以163郵箱為例,文章的后邊會記錄幾個我本人遇到的問題。也希望可以幫助到你;
package com.utils;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.util.Properties;
public class mailTest {
public static void main(String[] args) {
try {
sendMail();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("done...");
}
private static void sendMail() throws Exception {
/* --設(shè)置郵件服務(wù)器、端口、開啟認證-- */
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.163.com");
props.put("mail.smtp.port", 25);
props.put("mail.smtp.auth", true);
/* --創(chuàng)建Session-- */
Session session = Session.getInstance(props, new Authenticator() {
/* authenticator */
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("xxx@163.com", "********");
}
});
/* --發(fā)件人-- */
Address addressFrom = new InternetAddress("xxx@163.com");
// 如果希望發(fā)件人顯示中文,則可以使用:
// Address addressFrom = new InternetAddress("xxx@163.com", MimeUtility.encodeText("發(fā)送者"));
/* --收件人-- */
Address addressTo = new InternetAddress("xxx@163.com");
// 如果希望收件人顯示中文,則可以使用:
// Address addressToOne = new InternetAddress(recipient, MimeUtility.encodeText("收件人"));
/* --抄送-- */
Address[] addressToArr = {new InternetAddress("xxx1@163.com"), new InternetAddress("xxx2@163.com"), new InternetAddress("xxx3@163.com")};
/* --郵件內(nèi)容-- */
Message message = new MimeMessage(session);
message.setFrom(addressFrom);
message.setRecipient(Message.RecipientType.TO, addressTo);
message.setRecipients(Message.RecipientType.CC, addressToArr);
message.setSubject("郵件主題");
// 如果是定時任務(wù)發(fā)送,采用以下編碼可解決亂碼問題:
// message.setSubject(MimeUtility.encodeText("郵件主題", "gbk", null));
message.setText("Hi, 這里是郵件正文");
// 如果要發(fā)送的郵件正文為HTML,則第二個參數(shù)為"text/html"
// 如果要發(fā)送的郵件正文為HTML并且包含中文,則第二個參數(shù)為"text/html;charset=gbk"
// message.setContent("<p>Hi, 這里是郵件正文</P>", "text/html;charset=gbk");
/* --發(fā)送-- */
Transport.send(message);
/* --發(fā)送完成,做下記錄-- */
System.out.println("javax.mail:郵件發(fā)送完畢");
}
}
上邊這段代碼是可行的。你只需將發(fā)件人、收件人的郵箱按實際情況替換即可;
執(zhí)行結(jié)果如下:

result
本人遇到的問題及解答:
1、如何引入依賴?
maven項目在對應(yīng)的pom.xml文件中引入即可
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
2、mail.smtp.host是郵件服務(wù)器地址,163郵箱的話,可以登錄網(wǎng)頁版,點擊 設(shè)置-POP3/SMTP/IMAP

網(wǎng)頁版截圖
3、PasswordAuthentication中的賬戶名和密碼究竟是什么?
賬戶名很好理解,就是發(fā)件人郵箱;
密碼要注意了,這并不是163郵箱登錄密碼,而是自己另外設(shè)置的一個授權(quán)碼,專門用于登錄第三方郵件客戶端的專用密碼。在下圖位置中點擊開啟即可通過手機號設(shè)置授權(quán)碼:

授權(quán)碼設(shè)置截圖
4、想發(fā)送HTML格式的郵件正文怎么辦?
代碼中已經(jīng)給出了注釋,使用setContent方法即可。
message.setContent("<p>Hi, here is content</P>", "text/html");
需要注意的是,當郵件正文中出現(xiàn)中文,則需要加上charset,否則會出現(xiàn)亂碼。
message.setContent("<p>Hi, 這里是郵件正文</P>", "text/html;charset=gbk");
5、定時任務(wù)/腳本執(zhí)行,郵件主題亂碼怎么辦?
代碼中同樣給出了注釋:
message.setSubject(MimeUtility.encodeText("郵件主題", "gbk", null));
如果這篇文章對你有幫助,不妨點個贊再走吧~ _