如何使用 Parse 和 Mandrill 发送电子邮件通知?

How can I send email notifications with Parse and Mandrill?

我正在尝试使用 Mandrill 向我的网络应用程序的用户发送基于事件的电子邮件通知。我正在将 Parse 与 Back4App 一起使用。

在本教程 (https://docs.back4app.com/docs/integrations/parse-server-mandrill/) 中,托管服务提供商建议使用以下方法从 Android 应用程序调用 Mandrill 云代码:

public class Mandrill extends AppCompatActivity {


 @Override

 protected void onCreate(Bundle savedInstanceState) {

   Parse.initialize(new Parse.Configuration.Builder(this)

    .applicationId("your back4app app id”)

     .clientKey(“your back4app client key ")

      .server("https://parseapi.back4app.com/").build()

     );


     Map < String, String > params = new HashMap < > ();

     params.put("text", "Sample mail body");

     params.put("subject", "Test Parse Push");

     params.put("fromEmail", "someone@example.com");

     params.put("fromName", "Source User");

     params.put("toEmail", "other@example.com");

     params.put("toName", "Target user");

     params.put("replyTo", "reply-to@example.com");

     ParseCloud.callFunctionInBackground("sendMail", params, new FunctionCallback < Object > () {

      @Override

      public void done(Object response, ParseException exc) {

       Log.e("cloud code example", "response: " + response);

      }

     });


     super.onCreate(savedInstanceState);

     setContentView(R.layout.activity_mandrill);

    }

   }

如何使用 Parse JavaScript SDK 在 JavaScript 中实现此功能?

这是我目前所做的,但它不会发送电子邮件。我设置了 Mandrill,以及经过验证的电子邮件域和有效的 DKIM 和 SPF。

// Run email Cloud code
Parse.Cloud.run("sendMail", {
    text: "Email Test",
    subject: "Email Test",
    fromEmail: "no-reply@test.ca",
    fromName: "TEST",
    toEmail: "test@gmail.com",
    toName: "test",
    replyTo: "no-reply@test.ca"
}).then(function(result) {
    // make sure to set the email sent flag on the object
    console.log("result :" + JSON.stringify(result));
}, function(error) {
    // error
});

我什至没有在控制台中得到结果,所以我认为云代码甚至没有执行。

您必须将 Mandrill 电子邮件适配器添加到您的 Parse Server 的初始化中,如他们的 Github page. Also check the Parse Server Guide for how to initialise or use their example project 所述。

然后按照 guide 设置 Cloud Code。您需要使用 Android 应用程序或任何 Javascript 应用程序调用 Cloud Code 函数,或者直接在 Cloud Code 中使用解析对象的 beforeSave 或 afterSave 挂钩,这样您就可以发送 Welcome用户注册时的电子邮件。如果您想基于对象更新实现基于行为的电子邮件,这可能会派上用场。另外,因为它在服务器上而不是在客户端上,所以更容易维护和扩展。

要使 Cloud Code 功能真正通过 Mandrill 发送电子邮件,您需要向您的 Cloud Code 功能添加更多代码。首先,添加一个包含以下内容的文件:

var _apiUrl = 'mandrillapp.com/api/1.0';
var _apiKey = process.env.MANDRILL_API_KEY || '';

exports.initialize = function(apiKey) {
  _apiKey = apiKey;
};

exports.sendTemplate = function(request, response) {
  request.key = _apiKey;

  return Parse.Cloud.httpRequest({
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    url: 'https://' + _apiUrl + '/messages/send-template.json',
    body: request,
    success: function(httpResponse) {
      if (response) {
        response.success(httpResponse);
      }
      return Parse.Promise.resolve(httpResponse);
    },
    error: function(httpResponse) {
      if (response) {
        response.error(httpResponse);
      }
      return Parse.Promise.reject(httpResponse);
    }
  });
};

在您的 Cloud Code 文件中需要该文件,并像使用任何其他 Promise 一样使用它。

var Mandrill = require("./file");
Mandrill.sendTemplate({
      template_name: "TEMPLATE_NAME",
      template_content: [{}],
      key: process.env.MANDRILL_API_KEY,
      message: {
        global_merge_vars: [{
          name: "REPLACABLE_CONTENT_NAME",
          content: "YOUR_CONTENT",
        }],
        subject: "SUBJECT",
        from_email: "YOUR@EMAIL.COM",
        from_name: "YOUR NAME",
        to: [{
          email: "RECIPIENT@EMAIL.COM",
          name: "RECIPIENT NAME"
        }],
        important: true
      },
      async: false
    })
    .then(
      function success() {

      })
    .catch(
      function error(error) {

      });

确保您在 Mailchimp 上创建了一个模板,右键单击它并选择 "Send to Mandrill",这样您就可以在通过 API.

发送时使用该模板的名称

这有点复杂,但一旦设置好,它就会非常有效。祝你好运!