即使经过验证,AWS SES 电子邮件也始终发送至垃圾邮件

消防工作

我相信很多人都问过同样的问题,但我找不到全面的答案。我们正在悉尼地区部署的 EC2 实例上运行 Web 应用程序 (myapp.com)。该应用程序通过 AWS SES 发送电子邮件。由于 SES 在悉尼不可用,我们在俄勒冈州配置了 SES。我们生成了 SMTP 凭据,并将 Springboot 应用程序配置为使用这些凭据发送电子邮件。我们能够发送电子邮件并且电子邮件成功发送,但它进入垃圾邮件文件夹。发件人邮箱地址是:[email protected] 我们在SES控制台验证了域名 我们在SES控制台验证了[email protected]邮箱地址 DKIM也开启验证

但是,我们不确定为什么电子邮件会一直发送到垃圾邮件文件夹。当我查看 RAW 电子邮件消息时,我可以看到 SPF 标头:SPF: NEUTRAL with IP xx.xx.xx.xxx 我没有在我的 DNS 名称中配置任何 SPF 记录,但据我所知,我不需要,因为我使用的是 SES SMTP 服务器而不是自定义 MAIL FROM。

我不知道为什么电子邮件会被发送到垃圾邮件。任何人都可以帮忙吗?

消防工作

解决了这个问题。我不确定到底发生了什么,但是当使用 SpringBoot JavaMailSenderImpl 使用 AWS SES 发送电子邮件时,所有电子邮件都没有使用 DKIM 签名(外发电子邮件中没有 DKIM 标头)。这导致一些 SMTP 服务器将我们的电子邮件视为垃圾邮件。

我已经通过使用 Java Mail API (javax.mail) 发送电子邮件解决了这个问题,一旦我这样做了,那么所有的电子邮件都带有 DKIM 标头,并且没有一个进入垃圾邮件文件夹(针对 Gmail 和 Outlook 进行测试) .

同样,我不确定为什么使用 SpringBoot JavaMailSenderImpl 会导致这个问题。我的理解是 JavaMailSenderImpl 在幕后使用 Java Mail,但由于某种原因,没有电子邮件包含 DKIM 标头。

下面是我使用 Java Mail 的电子邮件发件人,如果它可以帮助任何人的话。

            try {
            Properties properties = new Properties();

            // get property to indicate if SMTP server needs authentication
            boolean authRequired = true;

            properties.put("mail.smtp.auth", authRequired);
            properties.put("mail.smtp.host", "ses smtp hostname");
            properties.put("mail.smtp.port", 25);
            properties.put("mail.smtp.connectiontimeout", 10000);
            properties.put("mail.smtp.timeout", 10000);
            properties.put("mail.smtp.starttls.enable", false);
            properties.put("mail.smtp.starttls.required", false);



            Session session;
            if (authRequired) {
                session = Session.getInstance(properties, new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("ses_username","ses_password");
                    }
                });
            } else {
                session = Session.getDefaultInstance(properties);
            }

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("[email protected]"));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));

            message.setSubject("This is a test subject");
            Multipart multipart = new MimeMultipart();
            BodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent("This is test content", "text/html");
            htmlPart.setDisposition(BodyPart.INLINE);
            multipart.addBodyPart(htmlPart);
            message.setContent(multipart);
            Transport.send(message);

        } catch (Exception e) {
            //deal with errors

        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

AWS SES SDK发送带有附件的电子邮件

JavaScript-使用AWS SES发送电子邮件

气流-使用AWS SES发送电子邮件

AWS SES发送电子邮件不起作用

无法在AWS SES上发送邮件,未验证电子邮件

设置电子邮件接收 AWS SES

获取电子邮件内容AWS SES

AWS SES无法接收电子邮件

AWS SES-退回的电子邮件

为什么电子邮件应始终在 AWS SES 的 US-EAST-1 区域进行验证?

AWS SES电子邮件未通过Laravel验证

节点AWS-SDK SES电子邮件发送验证失败

AWS SES 表示电子邮件地址未经验证,即使它用于 ccAddress,而不是来自?

电子邮件已验证,但我仍然无法使用Amazon SES发送电子邮件

我可以使用域名下的任何电子邮件通过AWS SES发送电子邮件吗?

通过 AWS SES 发送电子邮件是否仍取决于电子邮件托管的每日电子邮件数量限制?

AWS Lambda 无法通过 AWS SES 发送电子邮件

在AWS Lambda函数中通过AWS SES发送电子邮件

如何使用Amazon SES SMTP将电子邮件发送到未经验证的地址

Amazon SES-电子邮件验证通知

Amazon SES API ...电子邮件地址未验证

Amazon SES电子邮件地址未验证

发送电子邮件时,如何为Amazon SES服务提供AWS密钥?

在Apache Airflow DAG中使用AWS SES发送失败电子邮件

使用 aws ses sdk(Java) 从亚太地区(孟买)发送电子邮件

发送电子邮件时,Node.Js AWS SES-ETIMEDOUT

从AWS Lambda发送SES电子邮件-节点JS错误“找不到模块'nodemailer”

无法使用Amazon AWS,SES和PostFix发送电子邮件

如何使用Courier将文件附加到随AWS SES发送的电子邮件中?