系統定位與技術選型
- **目標**:瀏覽器端完成收發、轉發、回覆、刪除、列印、用戶管理等完整郵件功能。
- **平台**:Linux + Tomcat/Jetty + JavaMail API + PostgreSQL/MySQL(用戶/設定存儲)。
- **優勢**:純 Java 跨平台、Servlet 執行緒模型(單請求一執行緒)輕量高效、無需客戶端配置。
核心功能代碼解析
1. 獲取用戶輸入並建立 Session
String username = request.getParameter("login");
String password = request.getParameter("password");
Properties props = System.getProperties();
Session session = Session.getInstance(props, null);
2. 連接 POP3/IMAP 伺服器驗證
Store store = session.getStore("pop3"); // 或 "imap"
try {
store.connect(host, username + "%domain.com", password); // 特定郵件系統格式
} catch (AuthenticationFailedException e) {
// 處理登入失敗
}
3. 讀取收件箱郵件列表
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message[] messages = folder.getMessages();
// 批次預取信封、標誌、X-Mailer 減少網路往返
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
fp.add("X-Mailer");
folder.fetch(messages, fp);
4. 解析郵件內容(支援多部分 MIME)
public String getTextContent(Part part) throws MessagingException, IOException {
if (part.isMimeType("text/plain")) {
return (String) part.getContent();
} else if (part.isMimeType("multipart/*")) {
Multipart mp = (Multipart) part.getContent();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mp.getCount(); i++) {
sb.append(getTextContent(mp.getBodyPart(i)));
}
return sb.toString();
}
return "";
}
5. 發送郵件(SMTP + MIME 組裝)
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
msg.setSubject(subject);
// 純文本或多部分(含附件)
Multipart mp = new MimeMultipart();
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(body);
mp.addBodyPart(textPart);
// 附件處理
if (uploadFile != null) {
MimeBodyPart attachPart = new MimeBodyPart();
attachPart.attachFile(uploadFile);
mp.addBodyPart(attachPart);
}
msg.setContent(mp);
Transport.send(msg);
效能優化關鍵點
| 問題 | 對策 |
| 大郵箱列表載入慢 | 分頁載入(folder.getMessages(start, end))、虛擬滾動、索引快取主旨/發件人/時間 |
| 附件上傳記憶體暴漲 | 流式寫入磁碟(FileItemFactory)、限制單檔/總大小、病毒掃描非同步 |
| 併發連接數耗盡 | Store/Transport 連接池(Apache Commons Pool)、限制每用戶併發會話 |
| 垃圾郵件/釣魚郵件 | 整合 SpamAssassin、DKIM/SPF/DMARC 驗證、用戶舉報反饋循環 |
安全強化清單
- 強制 HTTPS(HSTS)、HttpOnly/Secure Cookie、CSRF Token。
- 密碼儲存:
BCrypt/Argon2,禁止明文/可逆加密。
- 輸入驗證:郵件地址格式、附件副檔名白名單、內容長度限制。
- 審計日誌:登入/發送/刪除/設定變更全記錄,保留 1 年以上。
現代化重構方向
- **前後端分離**:Vue/React + TypeScript 前端,Spring Boot / Quarkus REST API 後端。
- **微服務拆分**:收信、發信、用戶、搜尋、防垃圾獨立部署,gRPC/Kafka 通訊。
- **雲原生**:Kubernetes 部署、Prometheus/Grafana 可觀測、S3 兼容儲存附件。
- **AI 增強**:智能分類、自動回覆草稿、釣魚郵件檢測、郵件摘要生成。