【问题标题】:Will I run into problems if temporarily removing Uniqueness on Emails?如果暂时删除电子邮件的唯一性,我会遇到问题吗?
【发布时间】:2021-10-08 12:13:32
【问题描述】:

所以我目前第一次使用 ActionMailer / SendGrid,试图配置一些从应用程序发送的电子邮件。到目前为止一切正常,但问题是在我的种子文件中,我有很多使用假电子邮件帐户的假用户。这显然不是很好,因为当我在测试东西时将电子邮件发送到错误的地址时,它会影响我的 SendGrid 声誉。例如,我尝试添加 Devise 的“:confirmable”,突然在运行 db:seed 时我所有的假用户都收到了电子邮件????

作为一种潜在的解决方案,我想我会暂时允许电子邮件不是唯一的,然后让每个用户都拥有相同的电子邮件地址(我注册的实际地址,因此它们实际上会被递送)。所以我继续删除设计的“:validatable”,并准备进行迁移以更改用户表上此索引的最后一部分(将true更改为false):

    t.index ["email"], name: "index_users_on_email", unique: true

但在进行进一步研究后,我发现有人认为,一旦我想将其改回原来的样子,这可能会搞砸事情。

您会怎么做才能解决这个问题?这里最好的做法是什么?我很高兴收到您的反馈:)

【问题讨论】:

    标签: ruby-on-rails sendgrid actionmailer


    【解决方案1】:

    在这种情况下,我会保留唯一的验证并拥有一个有效的电子邮件地址用于测试目的。

    您仍然可以使用 + 号生成唯一的电子邮件地址,并在后面加上唯一标识符。

    为了清楚起见:

    创建一个有效的电子邮件帐户,例如 mytestuser@gmail.com。

    当您创建用户时,为他们分配 mytestuser+uniquecode@gmail.com 的电子邮件

    除了 + 号之外的任何内容都将被忽略,以便邮件传递,因此所有邮件都将发送到 mytestuser@gmail.com,但您的每个用户仍将拥有一个唯一的电子邮件地址。

    【讨论】:

    • 这当然只在您使用 GMail 地址作为目的地时才有效!但当然,确保您拥有所有可能发送到的电子邮件地址是一个好主意。
    • 谢谢大家,你们都结束了我几天的挫败感! ?
    【解决方案2】:

    如果您关心的是正确配置 SendGrid,您需要确保使用您拥有的真实电子邮件地址。但我怀疑您的问题更多是关于构建和检查应用程序逻辑和 ActionMailer。我真的建议不要删除约束,因为它一定会在某个时候回来咬你。

    我所做的是将 Rails 配置为在本地和 dev 上使用不同的邮件服务,而不是 SendGrid(然后我只为 qa 和 live 环境启用)。这让我可以在构建应用程序并发送可能损坏的电子邮件时使用MailTrap! MailTrap 从不向指定地址发送电子邮件 - 它只是接收您的应用发送的电子邮件并将它们存储在一个收件箱中,然后您可以检查您的电子邮件是否已发送以及它们的外观,无论指定的收件人电子邮件地址如何. (其他类似的服务可用:Mailinator 就是其中之一。)这使您可以在构建时使用随机电子邮件地址,从而保留您的唯一性约束,而无需向随机地址发送电子邮件。

    为此,请在 config/environments/development.rbconfig/environments/production.rb 中设置不同的邮件配置。 (测试设置为默认设置,电子邮件处于测试模式,因此无论如何都不会发送到现实世界。)

    【讨论】:

    • 嘿,谢谢!当我使用 gmail 地址时,上述解决方案对我来说就像一个魅力。但这只是锦上添花 - 非常感谢!
    猜你喜欢
    • 2022-08-18
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多