今天利用java發郵件,本地windows上測試時發送ok的,部署到服務器上卻報異常,讓咱們走進異常,探索到底坑在哪裏,並填之。html
利用outlook發郵件代碼以下:前端
package com.website.service.impl; import com.alibaba.fastjson.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * @program: WebSite * @description: SpringMvc實現的發送email * @author: smallsoup * @create: 2018-06-30 20:29 **/ public class EmailServiceImpl { private static final Logger LOGGER = LoggerFactory.getLogger(Test.class); @Autowired @Qualifier("javaMailSender") private JavaMailSenderImpl sender; /** * @方法名: sendMail * @參數名:@param subject 郵件主題 * @參數名:@param content 郵件內容 * @參數名:@param to 收件人Email地址 * @描述語: 發送郵件 */ public void sendMailHtml(String to, String subject, String content) throws Exception { sender.setUsername("yourusername@outlook.com"); sender.setPassword("your_password"); sender.setPort(587); Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.host", "smtp-mail.outlook.com"); props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.auth", "true"); props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.socketFactory.port", "587"); props.setProperty("mail.smtp.socketFactory.fallback", "true"); props.setProperty("mail.smtp.auth.ntlm.domain", "THING"); sender.setJavaMailProperties(props); //創建郵件消息,發送簡單郵件和html郵件的區別 MimeMessage mailMessage = sender.createMimeMessage(); MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage); messageHelper.setFrom("smallsoup@outlook.com"); //用於接收郵件的郵箱 messageHelper.setTo(to); //郵件的主題 messageHelper.setSubject(subject); //郵件的正文,第二個boolean類型的參數表明html格式 messageHelper.setText(content, true); LOGGER.info("----------sendMailHtml-----------------"); LOGGER.info("----------mailMessage is------------FROM:{}, Subject:{}, content:{}, AllRecipients:{}", mailMessage.getFrom(), mailMessage.getSubject(), mailMessage.getContent(), JSON.toJSONString(mailMessage.getAllRecipients())); //發送 sender.send(mailMessage); } }
上面的代碼打包在本地tomcat上運行,能夠發送郵件成功。可是將war包部署到亞馬遜雲服務器上發送郵件報錯:java
網上說是因爲用戶名和密碼不正確致使驗證失敗。可是這不能解釋本地能發出去郵件的事實。繼續排查、google,實在找不到解決辦法。那就試着登錄下outlook郵件看能不能登進去,登錄正常,有一封最近的一次登陸存在某些異常的郵件。python
而後點擊查看最新活動狀態。異常顯示最近一次登錄在美國。web
這麼一來就知道問題了,因爲亞馬遜雲實際位置在美國,因此發郵件時至關於在異地登錄被拒絕。當點擊了「是我本人」以後,從新發郵件,就發出去了。面試
之因此不用163發郵件,是由於本地部署也能夠發出去,放到服務器上也發不出,報554 DT:SPM 163 smtp3,網上說是由於郵件主題和正文中又非法字符致使,目前還沒解決,以後再填此坑。spring
本公衆號免費提供csdn下載服務,海量IT學習資源,若是你準備入IT坑,勵志成爲優秀的程序猿,那麼這些資源很適合你,包括但不限於java、go、python、springcloud、elk、嵌入式 、大數據、面試資料、前端 等資源。同時咱們組建了一個技術交流羣,裏面有不少大佬,會不定時分享技術文章,若是你想來一塊兒學習提升,能夠公衆號後臺回覆【2】,免費邀請加技術交流羣互相學習提升,會不按期分享編程IT相關資源。編程
掃碼關注,精彩內容第一時間推給你json