JDK自帶的Mail類庫封裝的簡直就是一坨屎(大家不要罵我),用起來怎么看怎么變扭,所以一開始我就想到了SPRing Mail這個優雅的封裝集成類庫。下面就說說,我使用Spring Mail遇到的幾個問題。
com.sun.mail.smtp.SMTPSendFailedException: 500 Error: bad syntax
Exception in thread "main" org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 500 Error: bad syntax; message exception details (1) are:Failed message 1:com.sun.mail.smtp.SMTPSendFailedException: 500 Error: bad syntax at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:433) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)由于平時工作使用郵件不多,一開始遇到這個問題,沒看懂這個錯誤是什么意識,也是弄了好久。最后用藍燈神器搜到了跟我這個異常差不多的文章。 http://stackoverflow.com/questions/38889504/smtp-protocol-500-error-bad-syntax
總結 我沒有加上helper.setFrom(username); 這段代碼。剛開始我以為 sender.setUsername(username);這段代碼就是設置了郵件的發送人,可實際上不是的。com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required
Exception in thread "main" org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required; message exception details (1) are:Failed message 1:com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388) at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:433) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)這個錯誤相對于第一個錯誤來說,還是比較容易懂(認證的問題)。剛開始我以為是郵箱的賬號和密碼設置有問題,在Foxmail中驗證了一下沒問題,就排除了這個原因。最后只能開啟搜索模式啦! http://www.cnblogs.com/liuling/archive/2013/03/25/asdfasdf.html
總結 少寫了下面這段代碼,我估計默認這個mail.smtp.auth屬性值是false吧!Properties mail = System.getProperties();mail.put("mail.smtp.auth", "true");sender.setJavaMailProperties(mail);javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection
Exception in thread "main" org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?. Failed messages: javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?; message exception details (1) are:Failed message 1:javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370) at javax.mail.Service.connect(Service.java:275) at org.springframework.mail.javamail.JavaMailSenderImpl.connectTransport(JavaMailSenderImpl.java:486) at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:406) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345) at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)大概意識是,你使用了ssl安全連接協議,但是傳輸的數據是明文。
sender.setProtocol("smtps"); //默認是smtp【smtps協議端口465 smtp協議端口25】sender.setPort(25);總結 Spring Mail默認使用的是smtp協議,也就是說,如果你不設置郵件協議,端口只能設置為25。 如果您不是太清楚郵件的設置,可以參考foxmail

郵件的初始化比較消耗計算機資源,強烈建議在項目中用spring bean的方式來管理,不要像我這樣每發一份郵件就初始化一個郵件客戶端。這個問題就好比,你是每收發一份郵件打開一次Foxmail還是Foxmail一直開著。
新聞熱點
疑難解答