Hotmail (Outlook.com) 不支援標準 POP3/SMTP/IMAP 協定,導致 JavaMail 無法直接存取。本文深度解析 Hotmail 的 WebDAV/HTTPMail 協定機制,引入開源專案 JDAVMail 實作 JavaMail Provider,完整示範郵件收發整合代碼。
WebDAV (Web Distributed Authoring and Versioning) 擴充 HTTP 解決:
JAR 內 `META-INF/javamail.providers`:
protocol=davmail; type=store; class=com.posisoft.jdavmail.JDAVMailStore; vendor=Positive Software
protocol=davmail_xmit; type=transport; class=com.posisoft.jdavmail.JDAVMailTransport; vendor=Positive Software
JavaMail 依協定名稱查找此檔案,動態載入對應實作類別。
Properties props = new Properties();
Session session = Session.getInstance(props);
// 關鍵:使用 "davmail" 協定名稱
Store store = session.getStore("davmail");
// Hotmail 伺服器固定,無需指定 host
store.connect(null, "your_account@hotmail.com", "password");
if (store.isConnected()) {
Folder inbox = store.getFolder("INBOX");
if (inbox.exists()) {
inbox.open(Folder.READ_ONLY);
int count = inbox.getMessageCount();
System.out.println("Inbox contains " + count + " messages");
for (int i = 1; i <= count; i++) {
Message msg = inbox.getMessage(i);
System.out.println("Subject: " + msg.getSubject());
System.out.println("From: " + msg.getFrom()[0]);
System.out.println("Content-Type: " + msg.getContentType());
System.out.println("Content: " + msg.getContent());
}
}
inbox.close(false);
store.close();
}
Properties props = new Properties();
// 設定發件人 (Hotmail 強制要求)
props.setProperty("mail.davmail.from", "your_account@hotmail.com");
Session session = Session.getInstance(props);
Transport transport = session.getTransport("davmail_xmit");
transport.connect(null, "your_account@hotmail.com", "password");
MimeMessage message = new MimeMessage(session);
message.setSubject("Test from JavaMail");
message.setFrom(new InternetAddress("your_account@hotmail.com"));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress("recipient@example.com", "Recipient"));
message.setText("Hello from JDAVMail!");
message.setSentDate(new Date());
transport.sendMessage(message, message.getAllRecipients());
transport.close();
Microsoft 現已支援標準協定 (需啟用);建議優先使用:
| 協定 | 伺服器 | 埠 | 加密 |
|---|---|---|---|
| IMAP | outlook.office365.com | 993 | SSL/TLS |
| SMTP | smtp.office365.com | 587 | STARTTLS |
| POP3 | outlook.office365.com | 995 | SSL/TLS |
標準協定相容性更好、效能更穩定、無第三方相依。JDAVMail 適用於舊版 Hotmail 帳號無法啟用標準協定的歷史場景。
此設計完美體現 SPI (Service Provider Interface) 與 開放封閉原則。
JDAVMail 透過 WebDAV 橋接 JavaMail 與 Hotmail,展示了標準 SPI 擴充的強大威力。雖現代 Outlook.com 已支援標準協定,但此案例對理解 JavaMail 架構、實作自訂郵件協定、處理非標準郵件系統整合具有極高參考價值。開發者應優先使用標準 IMAP/SMTP,無法時再考慮 JDAVMail 等第三方實作。