如何使用 Parse 和 Mandrill 发送电子邮件通知?
Posted
技术标签:
【中文标题】如何使用 Parse 和 Mandrill 发送电子邮件通知?【英文标题】:How can I send email notifications with Parse and Mandrill? 【发布时间】:2018-08-21 04:01:22 【问题描述】:我正在尝试使用 Mandrill 向我的 Web 应用程序的用户发送基于事件的电子邮件通知。我正在将 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
);
我什至没有在控制台中得到结果,所以我认为云代码甚至没有执行。
【问题讨论】:
【参考方案1】:您必须将 Mandrill 电子邮件适配器添加到 Parse 服务器的初始化中,如他们的 Github page 中所述。还要检查Parse Server Guide 以了解如何初始化或使用他们的example project。
然后按照guide 设置云代码。您需要使用您的 Android 应用程序或任何 Javascript 应用程序调用 Cloud Code 函数,或者直接在 Cloud Code 中使用 Parse 对象的 beforeSave 或 afterSave 挂钩,这样您就可以在用户注册时发送欢迎电子邮件。如果您想实现基于对象更新的基于行为的电子邮件,这可能会派上用场。另外,由于它在服务器上而不是客户端上,因此更易于维护和扩展。
要使 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 上创建了一个模板,右键单击它并选择“发送到 Mandrill”,这样您就可以在通过 API 发送时使用该模板的名称。
这有点复杂,但一旦设置好,它就会像魅力一样发挥作用。祝你好运!
【讨论】:
我没有设置自己的服务器,但我想这种方法应该可以。看起来不错。也可以使用 MailChimp 的自定义电子邮件模板。我可以看到这很有用。我最终只使用了 SendGrid,因为我无法让我的云代码运行。我认为这是主机的服务器端问题。以上是关于如何使用 Parse 和 Mandrill 发送电子邮件通知?的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Parse Cloud Code 和 Mandrill 发送电子邮件
未能通过 Mandril & Parse-Cloud-Code 发送超过 9 封电子邮件
Mandrill Handlebar 模板无法正确渲染/与 Parse.com 对象合并
可以要求 Mandrill 试运行电子邮件的发送吗? (解析云代码)
Android、Mandrill 和 Parse.com:Java ClassCastException:HashMap 无法转换为类