我正在尝试使用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
});
我甚至没有在控制台中得到结果,所以我认为云代码甚至没有执行。
答案 0 :(得分:1)
您必须将Mandrill电子邮件适配器添加到Parse Server的初始化中,如Github page所述。另请查看Parse Server Guide,了解如何初始化或使用example project。
然后按照guide设置Cloud Code。您希望使用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上创建模板,右键单击它并选择&#34;发送到Mandrill&#34;,这样您就可以在通过API发送时使用该模板的名称。
它有点牵扯,但一旦设置,它就像一个魅力。祝你好运!