带有解析服务器的 Mandrill 无法进行 heroku 迁移
Posted
技术标签:
【中文标题】带有解析服务器的 Mandrill 无法进行 heroku 迁移【英文标题】:Mandrill with parse server not working on heroku migration 【发布时间】:2016-07-12 10:51:09 【问题描述】:我已经使用 mLab 将应用程序从 parse.com 迁移到 heroku,除了云代码之外一切正常。
我正在使用 Mandrill 从无法使用 heroku 的解析云代码发送电子邮件
这是我到目前为止所做的:
-
将 mandrill ~0.1.0 安装到 parse-server-example 并将代码推送到 heroku 应用程序
将云代码放入'/cloud/main.js'
从 ios 应用程序调用函数,其响应错误为:
[错误]:无效的功能。 (代码:141,版本:1.13.0)。
这是我的代码脚本:
Parse.Cloud.define("sendMail", function(request, response)
var Mandrill = require('mandrill');
Mandrill.initialize('xxxxxx-xxxxx');
Mandrill.sendEmail(
message:
text: "ffff",
subject: "hello",
from_email: "xxxxx@gmail.com",
from_name: "pqr",
to: [
email: "xxxxxxxxxx@gmail.com",
name: "trump"
]
,
async: true
,
success: function(httpResponse)
console.log(httpResponse);
response.success("Email sent!");
,
error: function(httpResponse)
console.error(httpResponse);
response.error("Uh oh, something went wrong");
);
);
但是在调用 'sendMail' 函数后,我收到了这个错误:
[错误]:无效函数。 (代码:141,版本:1.13.0)。 =================================== MailGun =============== ===========
Parse.Cloud.define('hello', function(req, res)
var api_key = 'key-xxxxxxxxxxxxxx';
var domain = 'smtp.mailgun.org';
var mailgun = require('mailgun-js')(apiKey: api_key, domain: domain);
var data =
from: 'xxxxxxxald@gmail.com',
to: 'xxxxx8@gmail.com',
subject: 'Hello',
text: 'Testing some Mailgun awesomness!'
;
mailgun.messages().send(data, function (error, body)
console.log(body);
);
//res.success(req.params.name);
);
【问题讨论】:
【参考方案1】:我在使用 sendgrid 时遇到了类似的问题,但我终于找到了解决问题的方法。
我认为这些步骤可能会对您有所帮助,
缺少一些括号或一些代码分隔符? (尝试在 main.js 中重写整个代码)
应用程序实际上正在运行? (当您在终端中键入“heroku open”时,您会收到默认消息?) - 如果没有,请检查第 1 步。
如果以前的方法不起作用,请回滚到安全构建并在 heroku 仪表板中添加附加组件,而不是自己安装它们,然后下载 git 并对 git 进行任何更改,然后推送。
【讨论】:
感谢您的回复。你的前两个步骤都很好。我的应用程序正在运行。但 Mandrill 代码不是。没有可用的山魈插件。下载 git 并推送哪个 git(解析服务器)是什么意思?或者如果你有任何方法来执行我的山魈代码。 好吧,因为没有 mandrill 插件它不会工作,我建议这一步的原因是因为当你通过仪表板添加组件时,如果我没有错,heroku 会做一些更改git 为了实现插件,这样你就不必自己做它们,也可以跳过过程的某些部分。因此,完成此操作后,您使用 heroku 工具带下载 git,然后对 git 进行其他更改,然后将其推送到 heroku 应用程序,这就是我设法让 sendgrid 工作的方法。 哦对了,你启用了云代码吗?你需要去 git 中的 dockerfile 并取消注释:VOLUME /parse/cloud 我取消注释 Dockfile 中的行并将其推送到 heroku git 但同样的错误。 [错误]: "code":1,"message":"Internal server error."(代码:1,版本:1.13.0) 嗯,错误信息现在不同了,我认为内部服务器错误意味着代码有问题。尝试将 mandrill 的初始化程序放在云函数之外【参考方案2】:下面我粘贴了云代码 main.js 代码,该代码在 heroku 解析应用程序上使用 Mandrill 来发送密码恢复电子邮件。
在云代码main.js中:
var mandrill_key = process.env.MANDRILL_KEY;
var Mandrill = require('mandrill-api/mandrill');
var mandrill_client = new Mandrill.Mandrill(mandrill_key);
success: function(gameScore)
//alert('New object created with objectId: ' + gameScore.id);
mandrill_client.messages.send(
message:
html: "<p>Hello " + firstUser.get('fullname') + ",</p><p>We received your request to reset your password.</p><p>Your user name is <strong>" + firstUser.get('username') + "</strong>. Please <a href=\"http://test-sample-app.herokuapp.com/?#/account/reset/password/" + jsonct.ct + "\">click here</a> to create a new password. This link will expire in one hour after this mail was sent</p><p>If you need additional help, just let us know.</p><p>SampleCompany Support<br>customerservice@example.com</p><p>Copyright Sample Company, Inc. 2014-2017</p>",
subject: "Sample Company Name account recovery",
from_email: "customerservice@example.com",
from_name: "Sample Company Name",
to: [
email: firstUser.get('email'),
name: firstUser.get('fullname')
]
,
async: true
,
//Success
function(httpResponse)
console.log(httpResponse);
//alert("Email sent!");
,
//Failure
function(httpResponse)
console.error(httpResponse);
//alert("Uh oh, something went wrong");
);
,
error: function(gameScore, error)
console.error(error.message);
//alert('Failed to create new object, with error code: ' + error.message);
,
useMasterKey: true
)
【讨论】:
以上是关于带有解析服务器的 Mandrill 无法进行 heroku 迁移的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 laravel + mandrill 发送 html 电子邮件