带有解析服务器的 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 电子邮件

Mandrill 入站电子邮件路由

带有 Heroku 的 Rails 不发送 Mandrill 电子邮件

带有 Mandrill 子域的通用深度链接

解析云代码 Mandrill Promise

带有 mandrill smtp 的 PHPMailer 给出连接错误