是否可以为Mandrill创建“开发”API密钥?

时间:2013-04-01 23:34:13

标签: mandrill

我正在使用Mandrill从我的Rails 3应用程序发送电子邮件。在生产中,我使用我在其管理控制台中设置的API密钥。为了防止开发和测试可能通过电子邮件发送给所有用户的SNAFU,我将垃圾密钥放在开发和测试环境配置中,我只将真实密钥放在生产配置中。 Mandrill允许您创建多个API密钥。有没有人知道是否有办法配置Mandrill,以便使用开发或测试密钥发送电子邮件的API调用将失败,除非满足某个先决条件(例如,电子邮件域匹配mycompany.com)?

4 个答案:

答案 0 :(得分:14)

Mandril现在添加了测试API密钥。 Read More on their site

答案 1 :(得分:8)

Mandrill API密钥的功能相同,并且对帐户中的所有API调用具有完全访问权限。目前没有开发,沙箱或测试密钥或作用域API密钥的概念。但是,测试模式/功能在开发路线图上。我目前没有ETA,但这绝对是我们正在努力的事情。

编辑添加:截至本回答时,这是不可能的。 Mandrill现在有一个test mode

答案 2 :(得分:6)

在Mandrill中创建“开发”API密钥有两种可能的方法,它们可以为不同的用例提供服务:

  1. 创建Test Key。实际上不会发送使用此密钥发送的电子邮件。这是最简单的方法,如果您的测试流程不需要您实际接收测试电子邮件,那么这是合适的。 (您仍然可以在“出站”标签中看到 已发送的电子邮件内容。)

  2. 创建一个实时API密钥,并使用Rules Engine进行设置,以便使用此密钥发送的电子邮件将被自动拒绝,除非收件人地址与某些模式匹配。如果您的测试流程要求实际接收您发送的电子邮件,则应使用此方法 - 例如,如果您对密码重置功能进行了自动端到端测试。

  3. 方法1:使用测试模式

    Test Mode已于2013年添加到Mandrill。要使用它,请先从 SMTP&的 API密钥子部分创建一个测试密钥。 设置标签的API信息部分。您在此处创建的第一个键将始终是实时键,但如果您再次单击“新API键”,则可以选择创建测试键:

    Screenshot showing the "Test Key" checkbox

    完成后,使用测试密钥“发送”一些电子邮件(实际上不会发送电子邮件),然后点击下面菜单中的打开测试模式选项。屏幕右上角:

    Screenshot showing how to turn on Test Mode

    当管理面板处于测试模式时,如果您转到 Outbound 标签,您将能够看到您已要求Mandrill使用您的测试API密钥发送的电子邮件,就像他们有真的被送了。

    方法2:使用规则引擎

    首先,从 SMTP&的 API密钥子部分创建一个新的实时API密钥。 设置标签的API信息部分。您 必须 为密钥指定一个描述,否则您将无法从规则引擎中引用该密钥。

    接下来,转到 Outbound 标签的规则部分,然后点击“添加规则”:

    Image showing 'outbound', 'rules' and 'add rule'

    在规则界面中,设置一个规则,如果API密钥是您的测试密钥且收件人的电子邮件符合您选择的某种模式,则该规则将拒绝电子邮件。该模式可以是单个电子邮件地址,如testbot@yourdomain.com,也可以是整个域,如*@yourdomain.com

    Example rules

    如果您想制作自己的复杂模式,请注意每the docs,Mandrill使用Python的fnmatch模块将您的模式与电子邮件地址(使用glob语法,您可能是如果使用Unix,请熟悉shell。

    使用此密钥发送到与您的模式匹配的域的电子邮件将真正发送并显示在实时的“出站”选项卡中。与该模式不匹配的那些将不会被发送,并将在实时的出站选项卡中显示为“已拒绝”。

答案 3 :(得分:0)

我们希望即使在test / dev中也能看到电子邮件,这样我们就可以看到事情是端到端的。为了防止客户收到测试电子邮件的问题,我们配置了一个初始化程序(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