最近項目需要用網易企業郵箱發送郵件,特意來將實現過程記錄一下:
maven導入jar包
1 <!-- javax.mai 核心包 --> 2 <dependency> 3 <groupId>javax.activation</groupId> 4 <artifactId>activation</artifactId> 5 <version>1.1</version> 6 </dependency> 7 <dependency> 8 <groupId>javax.mail</groupId> 9 <artifactId>mail</artifactId> 10 <version>1.4.5</version> 11 </dependency>
java 使用 javax.mail 實現企業郵箱 郵件發送
1 import java.util.Properties; 2 import javax.mail.internet.InternetAddress; 3 import javax.mail.internet.MimeMessage; 4 import javax.mail.internet.MimeUtility; 5 import org.apache.log4j.Logger; 6 import org.springframework.mail.javamail.JavaMailSenderImpl; 7 import org.springframework.mail.javamail.MimeMessageHelper; 8 import com.sun.mail.util.MailSSLSocketFactory; 9 10 public class SendMailSmtp { 11 private static Logger log = Logger.getLogger(SendTemplateSMS.class); 12 19 public static void sendHtmlMail() { 20 try{ 21 String from = "郵箱賬號名";//發件人昵稱展示 * 22 String[] to ={"接收郵箱1","接收郵箱2"};//接收郵箱 23 String subject = "郵件主題";//郵件主題 * 24 String text = "郵件內容"; 25 String host = "smtphz.qiye.163.com";//163企業郵箱smtp * 26 String username = "發件的企業郵箱";//企業郵箱 * 27 String password= "發件的企業郵箱的授權碼";//企業郵箱密碼 * 28 29 //設置服務器驗證信息 30 Properties prop = new Properties(); 31 prop.setProperty("mail.smtp.auth", "true"); 32 prop.setProperty("mail.smtp.timeout", "994"); // 加密端口(ssl) 可通過 https://qiye.163.com/help/client-profile.html 進行查詢 33 34 MailSSLSocketFactory sf = new MailSSLSocketFactory();// SSL加密 35 sf.setTrustAllHosts(true); // 設置信任所有的主機 36 prop.put("mail.smtp.ssl.enable", "true"); 37 prop.put("mail.smtp.ssl.socketFactory", sf); 38 39 //設置郵件內容 40 JavaMailSenderImpl javaMailSend = new JavaMailSenderImpl(); 41 MimeMessage message = javaMailSend.createMimeMessage(); 42 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "utf-8"); 43 String nick = MimeUtility.encodeText(from);//設置昵稱 44 messageHelper.setFrom(new InternetAddress(nick + " <"+username+">"));// 郵件發送者 45 messageHelper.setTo(to); 46 messageHelper.setSubject(subject); 47 messageHelper.setText(text, true); 48 49 //設置郵件服務器登錄信息 50 javaMailSend.setHost(host); 51 javaMailSend.setUsername(username); 52 javaMailSend.setPassword(password); 53 javaMailSend.setJavaMailProperties(prop); 54 log.info("maillText:" + text); 55 javaMailSend.send(message); 56 } catch (Exception e) { 57 // TODO Auto-generated catch block 58 log.error(e); 59 e.printStackTrace(); 60 } 61 } 62 63 }
注意:
1.郵箱密碼是開通pop3/smtp服務時所給的授權碼,而不是你注冊郵箱時的真實密碼
2.檢查自己郵箱是否開通pop3/smtp服務。
3.mail.smtp.auth 要設為true
4.網易將郵件當成了垃圾郵件,這時你要在發郵件抄送加上自己,這時會極大降低識別成垃圾郵件的幾率。
5.因為網易163坑太多,最后附上網易錯誤碼解釋:
•421 HL:REP 該IP發送行為異常,存在接收者大量不存在情況,被臨時禁止連接。請檢查是否有用戶發送病毒或者垃圾郵件,並核對發送列表有效性;
•421 HL:ICC 該IP同時並發連接數過大,超過了網易的限制,被臨時禁止連接。請檢查是否有用戶發送病毒或者垃圾郵件,並降低IP並發連接數量;
•421 HL:IFC 該IP短期內發送了大量信件,超過了網易的限制,被臨時禁止連接。請檢查是否有用戶發送病毒或者垃圾郵件,並降低發送頻率;
•421 HL:MEP 該IP發送行為異常,存在大量偽造發送域域名行為,被臨時禁止連接。請檢查是否有用戶發送病毒或者垃圾郵件,並使用真實有效的域名發送;
•450 MI:CEL 發送方出現過多的錯誤指令。請檢查發信程序;
•450 MI:DMC 當前連接發送的郵件數量超出限制。請減少每次連接中投遞的郵件數量;
•450 MI:CCL 發送方發送超出正常的指令數量。請檢查發信程序;
•450 RP:DRC 當前連接發送的收件人數量超出限制。請控制每次連接投遞的郵件數量;
•450 RP:CCL 發送方發送超出正常的指令數量。請檢查發信程序;
•450 DT:RBL 發信IP位於一個或多個RBL里。請參考http://www.rbls.org/關於RBL的相關信息;
•450 WM:BLI 該IP不在網易允許的發送地址列表里;
•450 WM:BLU 此用戶不在網易允許的發信用戶列表里;
•451 DT:SPM ,please try again 郵件正文帶有垃圾郵件特征或發送環境缺乏規范性,被臨時拒收。請保持郵件隊列,兩分鍾后重投郵件。需調整郵件內容或優化發送環境;
•451 Requested mail action not taken: too much fail authentication 登錄失敗次數過多,被臨時禁止登錄。請檢查密碼與帳號驗證設置;
•451 RP:CEL 發送方出現過多的錯誤指令。請檢查發信程序;
•451 MI:DMC 當前連接發送的郵件數量超出限制。請控制每次連接中投遞的郵件數量;
•451 MI:SFQ 發信人在15分鍾內的發信數量超過限制,請控制發信頻率;
•451 RP:QRC 發信方短期內累計的收件人數量超過限制,該發件人被臨時禁止發信。請降低該用戶發信頻率;
•451 Requested action aborted: local error in processing 系統暫時出現故障,請稍后再次嘗試發送;
•500 Error: bad syntaxU 發送的smtp命令語法有誤;
•550 MI:NHD HELO命令不允許為空;
•550 MI:IMF 發信人電子郵件地址不合規范。請參考http://www.rfc-editor.org/關於電子郵件規范的定義;
•550 MI:SPF 發信IP未被發送域的SPF許可。請參考http://www.openspf.org/關於SPF規范的定義;
•550 MI:DMA 該郵件未被發信域的DMARC許可。請參考http://dmarc.org/關於DMARC規范的定義;
•550 MI:STC 發件人當天的連接數量超出了限定數量,當天不再接受該發件人的郵件。請控制連接次數;
•550 RP:FRL 網易郵箱不開放匿名轉發(Open relay);
•550 RP:RCL 群發收件人數量超過了限額,請減少每封郵件的收件人數量;
•550 RP:TRC 發件人當天內累計的收件人數量超過限制,當天不再接受該發件人的郵件。請降低該用戶發信頻率;
•550 DT:SPM 郵件正文帶有很多垃圾郵件特征或發送環境缺乏規范性。需調整郵件內容或優化發送環境;
•550 Invalid User 請求的用戶不存在;
•550 User in blacklist 該用戶不被允許給網易用戶發信;
•550 User suspended 請求的用戶處於禁用或者凍結狀態;
•550 Requested mail action not taken: too much recipient 群發數量超過了限額;
•552 Illegal Attachment 不允許發送該類型的附件,包括以.uu .pif .scr .mim .hqx .bhx .cmd .vbs .bat .com .vbe .vb .js .wsh等結尾的附件;
•552 Requested mail action aborted: exceeded mailsize limit 發送的信件大小超過了網易郵箱允許接收的最大限制;
•553 Requested action not taken: NULL sender is not allowed 不允許發件人為空,請使用真實發件人發送;
•553 Requested action not taken: Local user only SMTP類型的機器只允許發信人是本站用戶;
•553 Requested action not taken: no smtp MX only MX類型的機器不允許發信人是本站用戶;
•553 authentication is required SMTP需要身份驗證,請檢查客戶端設置;
•554 DT:SPM 發送的郵件內容包含了未被許可的信息,或被系統識別為垃圾郵件。請檢查是否有用戶發送病毒或者垃圾郵件;
•554 DT:SUM 信封發件人和信頭發件人不匹配;
•554 IP is rejected, smtp auth error limit exceed 該IP驗證失敗次數過多,被臨時禁止連接。請檢查驗證信息設置;
•554 HL:IHU 發信IP因發送垃圾郵件或存在異常的連接行為,被暫時掛起。請檢測發信IP在歷史上的發信情況和發信程序是否存在異常;
•554 HL:IPB 該IP不在網易允許的發送地址列表里;
•554 MI:STC 發件人當天內累計郵件數量超過限制,當天不再接受該發件人的投信。請降低發信頻率;
•554 MI:SPB 此用戶不在網易允許的發信用戶列表里;
•554 IP in blacklist 該IP不在網易允許的發送地址列表里