是否可以为 Mandrill 创建“开发”API 密钥?
Posted
技术标签:
【中文标题】是否可以为 Mandrill 创建“开发”API 密钥?【英文标题】:Is it possible to create a "development" API key for Mandrill? 【发布时间】:2013-03-23 03:11:03 【问题描述】:我正在使用 Mandrill 从我的 Rails 3 应用程序发送电子邮件。在生产中,我使用我在他们的管理控制台中设置的 API 密钥。为了防止可能向我们所有用户发送电子邮件的开发和测试 SNAFU,我已将垃圾密钥放入开发和测试环境配置中,而我只将真正的密钥放入生产配置中。 Mandrill 允许您创建多个 API 密钥。有谁知道是否有办法配置 Mandrill,以便使用开发或测试密钥发送电子邮件的 API 调用将失败,除非满足某个先决条件(例如电子邮件域与 mycompany.com 匹配)?
【问题讨论】:
【参考方案1】:Mandril 现在添加了测试 API 密钥。 Read More on their site
【讨论】:
【参考方案2】:Mandrill API 密钥的功能相同,并且对帐户中的所有 API 调用具有完全访问权限。目前没有开发、沙盒或测试密钥或范围 API 密钥的概念。但是,测试模式/功能在开发路线图上。我目前没有预计到达时间,但这绝对是我们正在努力的事情。
编辑添加:截至最初提供此答案时,这是不可能的。 Mandrill 现在有一个test mode。
【讨论】:
我想更新并通知您,我们添加了一些有助于测试和安全性的新功能。首先,API 密钥现在可以限定为只能从某些 IP 地址工作和/或只能访问某些 API 调用。规则引擎允许您自动拒绝符合特定条件的电子邮件,因此如果您的测试环境都“从”同一地址发送电子邮件,您可以根据需要拒绝而不是发送这些电子邮件。我们仍在计划其他测试功能,请随时给我们留言反馈或想法 - help.mandrill.com @Kaitlin-Mandrill 你能告诉我是否可以使用 Mailtrap 设置 Mandrill?我想发送电子邮件并查看它们,但实际上并没有让它们发送给真正的用户。如果这有意义的话。 @Kaitlin-Mandrill 关于测试 api 密钥(测试模式)的事情是不发送电子邮件。我们测试的很大一部分是接收某些电子邮件、单击链接并完成每个用户的工作流程。能够在测试模式下为测试目的指定允许的收件人列表会很整洁。 @TheMuffinMan - 在这种情况下,您最好的选择是创建一个真正的 API 密钥,然后使用规则引擎允许该密钥仅发送到某些地址(例如在您的域上)。您还可以使用规则引擎自动使用该 API 密钥标记电子邮件,以便将它们与其他/生产电子邮件区分开来。 @Kaitlin-Mandrill 感谢您的回复。我想真正的问题是我们不希望我们的声誉在我们使用实时 api 密钥发送测试电子邮件时受到打击。我们的想法是创建两个实时 Mandrill 帐户,并让其中一个作为我们的测试帐户。如果它对声誉有一些影响(反弹),那么它不会影响生产应用程序。【参考方案3】:在 Mandrill 中创建“开发”API 密钥有两种可能的方法,它们服务于不同的用例:
创建一个Test Key。实际上不会发送使用此密钥发送的电子邮件。这是最简单的方法,如果您的测试流程不需要您实际接收测试电子邮件,则该方法适用。 (您仍然可以在“出站”选项卡中看到将发送的电子邮件的内容。)
创建一个实时 API 密钥,并使用 Rules Engine 进行设置,以便使用此密钥发送的电子邮件将被自动拒绝,除非收件人地址与某种模式匹配。如果您的测试流程需要实际接收您发送的电子邮件,您应该使用这种方法 - 例如,如果您对密码重置功能进行了自动端到端测试。
方法一:使用测试模式
Test Mode 于 2013 年添加到 Mandrill。要使用它,首先从设置标签。您在此处创建的第一个密钥将始终是实时密钥,但如果您再次单击“新建 API 密钥”,您将能够选择创建一个测试密钥:
完成此操作后,使用测试密钥“发送”一些电子邮件(实际上不会发送电子邮件),然后从下拉菜单中单击 打开测试模式 选项屏幕右上角:
当管理面板处于测试模式时,如果您转到 Outbound 选项卡,您将能够看到您要求 Mandrill 使用您的测试 API 密钥发送的电子邮件,就好像他们有真的被发送了。
方法 2:使用规则引擎
首先,从 设置 选项卡的 SMTP 和 API 信息 部分的 API 密钥 子部分创建一个新的实时 API 密钥。您必须为密钥提供描述,否则您将无法从规则引擎中引用它。
接下来,转到 Outbound 选项卡的 Rules 部分,然后单击“添加规则”:
在规则界面中,设置一个规则,如果 API 密钥是您的测试密钥并且收件人的电子邮件与您选择的某些模式匹配,则该规则将拒绝电子邮件。该模式可以是单个电子邮件地址,例如 testbot@yourdomain.com
,也可以是整个域,例如 *@yourdomain.com
。
如果您想制作自己的复杂模式,请注意,根据 the docs,Mandrill 使用 Python 的 fnmatch 模块将您的模式与电子邮件地址匹配(它使用 glob 语法,您可能从您的shell,如果你使用 Unix)。
您使用此密钥发送到与您的模式匹配的域的电子邮件将真正被发送并显示在实时出站选项卡中。与模式不匹配的将不会被发送,并将在实时出站选项卡中显示为“已拒绝”。
【讨论】:
【参考方案4】:我们希望即使在测试/开发中也能看到电子邮件发送出去,以便我们可以看到端到端的工作。为了防止客户收到测试电子邮件时出现问题,我们配置了一个初始化程序(Ruby on Rails),如果不是生产,它将替换收件人。不要将检查留给各个 Mailer 实现——有人会忘记。
MandrillMailer.configure do |config|
config.api_key = ENV['MANDRILL_API_KEY']
# Set recipients to test@ourdomain.com if we're not in production
if !Rails.env.production?
config.interceptor = Proc.new do |params|
params[:to] = [ email: "test@ourdomain.com", name: "Test", type: "to" ]
end
end
end
【讨论】:
以上是关于是否可以为 Mandrill 创建“开发”API 密钥?的主要内容,如果未能解决你的问题,请参考以下文章
Mandrill 中的新 API 密钥默认具有对您帐户的完全访问权限 - 您可以自定义吗?