国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Spring Mail常見問題分析和解決辦法

2019-11-08 02:59:37
字體:
來源:轉載
供稿:網友

背景說明

JDK自帶的Mail類庫封裝的簡直就是一坨屎(大家不要罵我),用起來怎么看怎么變扭,所以一開始我就想到了SPRing Mail這個優雅的封裝集成類庫。下面就說說,我使用Spring Mail遇到的幾個問題。

核心代碼

public void sendMail(List<String> tos, List<String> ccs, String subject, String centent, List<File> attachments){ javaMailSenderImpl sender = new JavaMailSenderImpl(); sender.setHost(host); sender.setProtocol("smtp"); //默認是smtp【smtps協議端口465 smtp協議端口25】 sender.setPort(Integer.parseInt(port)); sender.setUsername(username); sender.setPassWord(password); Properties mail = System.getProperties(); mail.put("mail.smtp.auth", "true"); sender.setJavaMailProperties(mail); MimeMessage message = sender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message); try { helper.setSubject(subject); helper.setFrom(username); helper.setTo(tos.toArray(new String[]{})); if(CollectionUtils.isEmpty(bccs)){ helper.setCc(bccs.toArray(new String[]{})); } helper.setText(centent); if(!CollectionUtils.isEmpty(attachments)){ for(File file: attachments){ if(file.exists() && file.isFile()){ FileSystemResource fsr = new FileSystemResource(file); helper.addAttachment(file.getName(), fsr); } else{ log.warn("file: {} is not exists or directory.", file.getPath()); } } } sender.send(message); } catch (MessagingException e) { log.error(e.getMessage(), e); // 養成一個好習慣,把捕獲異常包裝為運行時異常,方便調用者 throw new RuntimeException(e.getMessage(), e); }}

問題一(郵箱發件人設置)

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一直開著。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浦东新区| 盐津县| 正镶白旗| 宝清县| 大姚县| 建瓯市| 临海市| 布拖县| 五寨县| 鸡西市| 新建县| 桦南县| 景宁| 兴文县| 龙泉市| 阿巴嘎旗| 沛县| 通化市| 肃北| 乐业县| 正阳县| 阿拉善右旗| 米林县| 万年县| 镇原县| 宁波市| 安宁市| 大丰市| 北流市| 隆尧县| 宜黄县| 哈密市| 九台市| 汶上县| 德惠市| 怀集县| 兴隆县| 宁河县| 南漳县| 会宁县| 浏阳市|