当前位置: 首页 > 知识库问答 >
问题:

无法使用spring javamail从服务器heroku发送电子邮件

左丘宜年
2023-03-14

我试图使用Spring javamail从Heroku发送电子邮件,但出现了错误。

我的代码:

import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;

@Service("mailService")
public class JavaMailerServiceImpl {

    private MailSender mailSender;
    public JavaMailerServiceImpl(JavaMailSenderImpl mailSender) {
        this.mailSender = mailSender;
    }

    public void sendMail(String to, String subject, String body){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(body);
        mailSender.send(message);
    }
}

豆:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.gmail.com"/>
    <property name="port" value="587"/>
    <property name="username" value="**********@gmail.com"/>
    <property name="password" value="********"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
            <prop key="mail.debug">true</prop>
        </props>
    </property>
</bean>

和控制器:

    @Autowired
    private JavaMailerServiceImpl mailService;

    @RequestMapping(method = RequestMethod.POST)
    public String sendEmail(HttpServletRequest request) {
        String recipientAddress = request.getParameter("recipient");
        String subject = request.getParameter("subject");
        String message = request.getParameter("message");
        mailService.sendMail(recipientAddress,subject,message);
    }`

在localhost:8080和localhost:5000上,测试成功完成,但在heroku服务器上,我有一个异常:

身份验证失败;嵌套的异常是javax。邮政身份验证失败异常:534-5.7.14请通过web浏览器和534-5.7.14登录,然后重试。534-5.7.14在534 5.7.14了解更多信息https://support.google.com/mail/answer/78754j4sm53975482wjg。20-gsmtp

我执行了谷歌的所有推荐。你能帮我解决这个问题吗?也许是链接之类的。谢谢你。

共有3个答案

归俊杰
2023-03-14

Skizo oz的回答ᴉʞS是正确的,但截至2022年5月30日,谷歌将不再支持使用第三方应用程序和设备,允许您使用用户名和密码登录您的谷歌帐户。

然而,谷歌提供了一个简单的解决方案。

输入由Google生成的应用程序密码,而不是密码。首先,转到设置并启用两步验证。

然后单击App密码

您应该看到应用程序密码屏幕。应用程序密码允许您从不支持两步验证的设备上的应用程序登录到您的Google帐户。选择邮件作为应用程序,然后选择一个设备。在我的例子中,我选择了“其他”,因为我想将我的应用程序部署到云。

完成后,单击生成按钮。您将看到生成的应用程序密码。

只需复制密码并将电子邮件发送服务中的前一个密码替换为生成的密码。不过,您将无法再次看到密码。

就是这样!

施俊远
2023-03-14

Devcenter heroku说:

Heroku平台本身不提供电子邮件服务,而是提供作为支持服务的附加组件,这些附加组件可以连接到您的应用程序以提供服务。

请咨询Heroku加载项市场,以获得符合您要求的适当电子邮件服务。

来源

栾钟展
2023-03-14

我解决了激活DisplayUnlockCaptcha的问题:

https://accounts.google.com/b/0/DisplayUnlockCaptcha

同时激活Lesssecureapps

https://www.google.com/settings/security/lesssecureapps

这些是属性:

#Mail properties
spring.mail.default-encoding=UTF-8
spring.mail.host=smtp.gmail.com
spring.mail.username=--
spring.mail.password=--
spring.mail.port=587
spring.mail.protocol=smtp
spring.mail.debug=true
spring.mail.smtp.auth=true
spring.mail.smtp.starttls.enable=true
 类似资料:
  • 问题内容: 我尝试使用 Spring javamail 从 Heroku 发送电子邮件,但出现错误。 __ 我的代码: 豆子: 和控制器: 在localhost:8080和localhost:5000上,测试成功完成,但是在heroku服务器上,我有例外: 验证失败;嵌套的异常是javax.mail.AuthenticationFailedException:534-5.7.14请通过Web浏览器

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏

  • 我目前正在为某人做一个网站,我想在联系我们页面上添加一个表单,使用他们没有Php的网络托管服务器向他们的电子邮件地址发送消息。有人能帮我吗?我无法理解这个过程,以及如何使它安全并真正发挥作用。我必须在服务器上部署一些东西吗?或者我可以使用他们在那里的smpt服务器吗?如果是这样,我如何确保smtp服务器身份验证在客户端的devols上不可见。谢谢你!

  • 我创建了下一个类: 我在我的服务中声明它是一项服务。yml 在我的控制器中,调用服务: 电子邮件已发送,但页面仍在加载30秒,我有一个来自开发人员工具栏的警报:加载Web调试工具栏时发生错误(404:未找到)。您想打开分析器吗?如果接受消息,Symfony分析器不显示任何错误。如果取消,消息开发人员工具栏不会出现。 我做错了什么? 非常感谢。

  • 问题内容: 我正在尝试从PHP页面通过GMail的SMTP服务器发送电子邮件,但出现此错误: 身份验证失败[SMTP:SMTP服务器不支持身份验证(代码:250,响应:mx.google.com,为您提供服务,[98.117.99.235]大小为35651584 8位MIME STARTTLS增强的状态代码,编码方式)]] 有人可以帮忙吗?这是我的代码: 问题答案: // Pear Mail Li