Java中的郵件發送有對應的類爲Email,在使用郵件的時候,需要在項目中導入座標
<!--javaMail-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.3</version>
</dependency>
在這個類中,如果開發者想直接使用他去發送是不可能的,還需要自己手打配置一下工具類的信息,特別是當你需要發送郵件的附件等信息
這裏我將介紹一款實用的工具包hutool,在這個包中有很多一件封裝好的工具類,比如郵箱,poi等,如果需要可以多多瞭解一下,這個開源包在碼雲上**
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.7</version>
</dependency>
1.郵件服務器配置
在classpath(在標準Maven項目中爲src/main/resources)的config目錄下新建mail.setting文件,最小配置內容如下,在此配置下,smtp服務器和用戶名都將通過from參數識別:
發件人(必須正確,否則發送失敗)
from = hutool@yeah.net
密碼(注意,某些郵箱需要爲SMTP服務單獨設置密碼,詳情查看相關幫助)
pass = q1w2e
有時候一些非標準郵箱服務器(例如企業郵箱服務器)的smtp地址等信息並不與發件人後綴一致,端口也可能不同,此時Hutool可以提供完整的配置文件:
2.完整配置
郵件服務器的SMTP地址,可選,默認爲smtp.<發件人郵箱後綴>
host = smtp.yeah.net
郵件服務器的SMTP端口,可選,默認25 port = 25 # 發件人(必須正確,否則發送失敗)
from = hutool@yeah.net
用戶名,默認爲發件人郵箱前綴 user = hutool # 密碼
(注意,某些郵箱需要爲SMTP服務單獨設置密碼,詳情查看相關幫助) pass = q1w2e3
注意郵件服務器必須支持並打開SMTP協議,詳細請查看相關幫助說明配置文件的樣例中提供的是我專門爲測試郵件功能註冊的yeah.net郵箱,帳號密碼公開,供Hutool用戶測試使用。
3.發送郵件
發送普通文本郵件,最後一個參數可選是否添加多個附件:
MailUtil.send("[email protected]", "測試", "郵件來自Hutool測試", false);
發送HTML格式的郵件並附帶附件,最後一個參數可選是否添加多個附件:
MailUtil.send("[email protected]", "測試", "<h1>郵件來自Hutool測試</h1>", true, FileUtil.file("d:/aaa.xml"));
羣發郵件,可選HTML或普通文本,可選多個附件:
ArrayList<String> tos = CollUtil.newArrayList( "[email protected]", "[email protected]", "[email protected]", "[email protected]"); MailUtil.send(tos, "測試", "郵件來自Hutool羣發測試", false);
發送郵件非常簡單,只需一個方法即可搞定其中按照參數順序說明如下:
tos: 對方的郵箱地址,可以是單個,也可以是多個(Collection表示)
subject:標題
content:郵件正文,可以是文本,也可以是HTML內容
isHtml: 是否爲HTML,如果是,那參數3識別爲HTML內容
files: 可選:附件,可以爲多個或沒有,將File對象加在最後一個可變參數中即可
4.其它
自定義郵件服務器除了使用配置文件定義全局賬號以外,MailUtil.send方法同時提供重載方法可以傳入一個MailAccount對象,這個對象爲一個普通Bean,記錄了郵件服務器信息。
MailAccount account = new MailAccount();
account.setHost("smtp.yeah.net");
account.setPort("25");
account.setAuth(true);
account.setFrom("[email protected]");
account.setUser("hutool");
account.setPass("q1w2e3");
MailUtil.send(account, CollUtil.newArrayList("[email protected]"),
//"測試", "郵件來自Hutool測試", false);
使用SSL加密方式發送郵件在使用QQ或Gmail郵箱時,需要強制開啓SSL支持,此時我們只需修改配置文件即可:
//發件人(必須正確,否則發送失敗),“小磊”可以任意變更,<>內的地址必須唯一,以下方式也對
from = hutool@yeah.net from = 小磊<hutool@yeah.net>
//密碼(注意,某些郵箱需要爲SMTP服務單獨設置密碼,詳情查看相關幫助)
pass = q1w2e3
//使用SSL安全連接
sslEnable = true
在原先極簡配置下只需加入sslEnable即可完成SSL連接,當然,這是最簡單的配置,很多參數根據已有參數已設置爲默認。
完整的配置文件如下:
//郵件服務器的SMTP地址
host = smtp.yeah.net
//郵件服務器的SMTP端口
port = 465
//發件人(必須正確,否則發送失敗)
from = hutool@yeah.net
//用戶名(注意:如果使用foxmail郵箱,此處user爲qq號)
user = hutool
//密碼(注意,某些郵箱需要爲SMTP服務單獨設置密碼,詳情查看相關幫助)
pass = q1w2e3
//使用 STARTTLS安全連接,STARTTLS是對純文本通信協議的擴展。
startttlsEnable = true
//使用SSL安全連接
sslEnable = true
//指定實現javax.net.SocketFactory
//接口的類的名稱,這個類將被用於創建SMTP的套接字
socketFactoryClass = javax.net.ssl.SSLSocketFactory
//如果設置爲true,未能創建一個套接字使用指定的套接字工廠類將導致使用java.net.Socket創建的套接字類, 默認值爲true
socketFactoryFallback = true
//指定的端口連接到在使用指定的套接字工廠。如果沒有設置,將使用默認端口456
socketFactoryPort = 465
//SMTP超時時長,單位毫秒,缺省值不超時
timeout = 0 # Socket
//連接超時值,單位毫秒,缺省值不超時
connectionTimeout = 0
5、針對QQ郵箱和Foxmail郵箱的說明
(1) QQ郵箱中SMTP密碼是單獨生成的授權碼,而非你的QQ密碼,至於怎麼生成,見騰訊的幫助說明:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
使用幫助引導生成授權碼後,配置如下即可:
pass = 你生成的授權碼
(2) Foxmail郵箱本質上也是QQ郵箱的一種別名,你可以在你的QQ郵箱中設置一個foxmail郵箱,不過配置上有所區別。在Hutool中user屬性默認提取你郵箱@前面的部分,但是foxmail郵箱是無效的,需要單獨配置爲與之綁定的qq號碼或者[email protected]的XXXX。即: