天天看點

Java實作網易企業郵箱發送郵件

最近項目需要用網易企業郵箱發送郵件,特意來将實作過程記錄一下:

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不在網易允許的發送位址清單裡