【问题标题】:Flask-mail create independent mail instead of email threadFlask-mail 创建独立的邮件而不是电子邮件线程
【发布时间】:2019-09-01 12:01:36
【问题描述】:

我正在创建电子邮件验证服务并使用 Flask-mail。每当用户注册时,我都会发送一个唯一的验证链接来验证电子邮件地址。

根据我的代码,电子邮件主题(验证您的电子邮件地址...)保持不变,而每次发送新邮件时验证链接都会更改。但是,每次我向同一收件人发送新邮件时,该电子邮件都会在用户的 gmail 收件箱中以电子邮件线程的形式结束。

从附图中可以看出,三封发送的邮件都变成了一个邮件线程

如何配置 Flask-mail API 以发送独立邮件而不是创建电子邮件线程?

我正在查看documentation 和 StackOverflow,但找不到任何解决方案。


参考代码

mail = Mail(app=current_app)

# embedding a new validation link in the message body.
message_body = VERIFY_ACC_BODY.format(url_for('auth.verify_user_email', 
user_token=token, _external=True))

email_notification = Message(subject=VERIFY_ACC_SUBJECT,
                                 recipients=[user.user_id],
                                 body=message_body)

# creates email threads instead of independent emails. Why?
mail.send(email_notification)

注意:请不要建议为每封邮件更改电子邮件主题。这不是我正在寻找的解决方案。

【问题讨论】:

    标签: python flask gmail-api email-verification flask-mail


    【解决方案1】:

    很遗憾,您正试图对抗主要基于电子邮件主题行的 Gmail 功能。 More about this

    如果每封邮件都满足以下条件,则对电子邮件进行分组:

    • 与上一封邮件相同的收件人、发件人或主题。
    • 与上一条消息具有相同 ID 的引用标头。
    • 在上一条消息的一周内发送。

    防止分组电子邮件:

    • 为您不想分组的每封邮件创建一个新主题。
    • 使用与前一条消息不匹配的唯一参考标头值发送每条消息。

    您可以尝试:extra_headers={"references": "{{ unique value }}"} 在您的 email_notification = Message(...) 中尝试避免 Gmail 的线程功能。

    【讨论】:

    • 欢迎来到社区。我赞成你的回答。我将尝试找出 extra_header 参数。
    • 我刚刚留下了这个问题的答案,以便将来帮助人们。基本上,主题在 gmail 中用作标识符(如果邮件具有相同的收件人)。我选择不将您的答案标记为已接受,因为据我所知没有解决此问题的方法。
    【解决方案2】:

    注意:此答案自 2019 年 4 月 11 日起有效。将来,GmailFlask-mail 可能会更改一些政策或更新其 API。因此,此答案将来可能无效。


    我只是把这个答案留在这里,希望它可以为将来的人们节省一些时间。

    除了@VizslaVizsla 的回答之外,extra_headers={...} 的设置尽管经过反复测试似乎不起作用。尽管如此,电子邮件还是会被分组。

    几年前在 StackExchange 上发布了一个 similar question

    到目前为止,我已经尝试了各种不同的extra_headers。他们都没有阻止分组。

    from uuid import uuid4
    # uuid used to generate a unique identifier for every mail.
    
    extra_headers={'references': str(uuid4())} # Didn't work
    extra_headers={'Message Id': str(uuid4())} # Didn't work
    extra_headers={'Message-Id': str(uuid4())} # Gmail message id. Didn't work
    

    您似乎必须更改主题标题或收件人才能防止分组。不过,我还没有通过更改 CC 或 BCC 列表进行测试。如果你们有时间或耐心,请随时测试并在此处发布您的观察结果。

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 1970-01-01
      • 2022-08-06
      • 2021-10-17
      • 2017-03-12
      • 2019-06-29
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多