这个坑你能填吗?

今天利用java发邮件,本地windows上测试时发送ok的,部署到服务器上却报异常,让我们走进异常,探索到底坑在哪里,并填之。

利用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包部署到亚马逊云服务器上发送邮件报错:

网上说是由于用户名和密码不正确导致验证失败。但是这不能解释本地能发出去邮件的事实。继续排查、google,实在找不到解决办法。那就试着登陆下outlook邮件看能不能登进去,登陆正常,有一封最近的一次登录存在某些异常的邮件。

然后点击查看最新活动状态。异常显示最近一次登陆在美国。

这么一来就知道问题了,由于亚马逊云实际位置在美国,所以发邮件时相当于在异地登陆被拒绝。当点击了“是我本人”之后,重新发邮件,就发出去了。

之所以不用163发邮件,是因为本地部署也可以发出去,放到服务器上也发不出,报554 DT:SPM 163 smtp3,网上说是因为邮件主题和正文中又非法字符导致,目前还没解决,之后再填此坑。

原文发布于微信公众号 - 我的小碗汤(mysmallsoup)

原文发表时间:2018-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏工科狗和生物喵

FreeRTOS-Qemu 实现三任务同步通信机制以及API信息

---- 1. 本次作业的考察要点: 作业地址:https://github.com/HustWolfzzb/STM32F429DiscoveryFreeRTO...

1.2K60
来自专栏Kubernetes

深度解析Kubernetes Local Persistent Volume(二)

摘要:上一篇博客”深度解析Kubernetes Local Persistent Volume(一)“对local volume的基本原理和注意事项进行了分析,...

1.7K30
来自专栏温安适的blog

从零开始写简易读写分离,不难嘛!

32140
来自专栏Golang语言社区

Go语言开发RESTFul JSON API

也许我们之前有使用过各种各样的API, 当我们遇到设计很糟糕的API的时候,简直感觉崩溃至极。希望通过本文之后,能对设计良好的RESTful API有一个初步认...

1.3K30
来自专栏Java架构师历程

solr

Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支...

48020
来自专栏JavaEE

Java调用微信登录以及eclipse 远程调试前言:一、微信测试号的连接与申请:二、eclipse远程调试:总结:

35650
来自专栏Albert陈凯

Spark详解05架构Architecture架构

架构 前三章从 job 的角度介绍了用户写的 program 如何一步步地被分解和执行。这一章主要从架构的角度来讨论 master,worker,driver ...

33380
来自专栏coder修行路

Go基础之--位操作中你所不知道的用法

之前一直忽略的就是所有语言中关于位操作,觉得用处并不多,可能用到也非常简单的用法,但是其实一直忽略的是它们的用处还是非常大的,下面先回顾一下位操作符的基础 位操...

21460
来自专栏battcn

一起来学SpringBoot | 第二十二篇:轻松搞定重复提交(一)

在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发...

41520
来自专栏coolblog.xyz技术专栏

Spring AOP 源码分析系列文章导读

前一段时间,我学习了 Spring IOC 容器方面的源码,并写了数篇文章对此进行讲解。在写完 Spring IOC 容器源码分析系列文章中的最后一篇后,没敢懈...

11530

扫码关注云+社区

领取腾讯云代金券