通过 ses 发送电子邮件的问题

问题描述 投票:0回答:1

我的功能应该获取一个电子邮件地址并向该电子邮件地址发送一封预先写好的电子邮件。唯一的问题是我不断收到发回发件人并标记为垃圾邮件的电子邮件。不确定是什么问题。电子邮件是否被退回为垃圾邮件,或者是否因为电子邮件未能送达而被标记为垃圾邮件?消息内容如下:

我通过电子邮件作为经过验证的身份发送,并通过电子邮件而不是通过 dkim 进行验证。我检查时我们的域也没有完成 dkim 配置,这是问题吗?

这是我的代码,有问题吗?我尝试编写代码来捕获错误,但无济于事。任何建议都非常感激。

def email_reminder(user, subject_line, days_since_login, ses_client):

        if days_since_login >= 60:
            beginning_email_lines = f"""
                                    Hello {user},
            
                                    We've noticed that you have not logged into your AWS account in {days_since_login} days. 
            
                                          Your account has been been locked out."""
            
        else:
            beginning_email_lines = f"""
                                    Hello {user},
            
                                    We've noticed that you have not logged into your AWS account in {days_since_login} days. 
            
                                              your account will be locked out in {60 - days_since_login} day(s)."""

        counter = 0
        # call ses email function to send email to users based days since their last login
        while counter < 2:
            try:
                ses_client.send_email(
                    Source=
    '[email protected]',
                    Destination={
                        'ToAddresses': [user]
                    },
                    Message={
                        'Subject': {
                            'Data': subject_line
                        },
                        'Body': {
                            'Text': {
                                'Data': f""" {beginning_email_lines}

  
                                """
                            }
                        }
                    }
                )
            except Exception as e:
                counter += 1
                if counter >= 2:
                    logger.error(f"could not send email to user {user}, retries exceeded")
                    raise Exception("could not send email to user")
                else:
                    logger.error(f"could not send mail to {user}, error : {e}, trying again")
                    pass
python amazon-web-services boto3 amazon-ses dkim
1个回答
0
投票

DMARC 验证是通过提供 SPF DKIM 来完成的,而您很可能两者都没有。

Amazon SES 的“经过验证的发件人”是允许您使用 SES 并从您的域发送的其他内容。由于您通过设置 SPF 允许 AWS SES 服务器代表您发送电子邮件,因此无需经过验证的发件人功能,任何 SES 客户都可以从 AWS SES 服务器以您的名义发送电子邮件,并且它们将符合 SPF。

遵循 AWS 上有关 SPF [1] 和 DKIM [2] 的文档。您需要设置一个“邮件发件人”[3],但这可以是您在电子邮件发件人/返回地址中实际使用的域的子域(然后,当您在代表您发送的所有服务器上启用此功能时,为您的域启用 DMARC 块是一个很好的做法。)

分析电子邮件的 SPF/DKIM 状态也很好 LeranDMARC.com [4],请查看!并启用 Google Postmaster [5](免费)来跟踪您的域名声誉

[1] https://docs.aws.amazon.com/ses/latest/dg/send-email-authentication-spf.html

[2] https://docs.aws.amazon.com/ses/latest/dg/send-email-authentication-dkim.html

[3] https://docs.aws.amazon.com/ses/latest/dg/mail-from.html

[4] https://www.learndmarc.com/

[5] https://postmaster.google.com/

© www.soinside.com 2019 - 2024. All rights reserved.