【问题标题】:node-mandrill sending mail via servernode-mandrill 通过服务器发送邮件
【发布时间】:2018-01-05 19:28:14
【问题描述】:

这是一个关于正确使用 node-mandrill 的新手问题,很可能是在 node 本身上,因为我仍在尝试学习它。但是由于我已经看到很多直接从客户端使用 mandrill 的 api 密钥并因此暴露它的示例,我想知道它在提供服务时究竟是如何工作的,但在这一点上卡住了:

我有一个 app.js 服务于一个公用文件夹...

app.js

var express = require('express');
var mandrill = require('node-mandrill')(API_KEY); 
var app = express();
app.use(express.static('public'));
app.listen(PORT);

function sendEmail ( _name, _email, _subject, _message) {
    mandrill('/messages/send', {
        message: {
            to: 'EMAIL',
            from: [{email: _email , name: _name}],
            subject: _subject,
            text: _message
        }
    }, function(error, response){
        if (error) console.log( error );
        else console.log(response);
    });
}

...客户端脚本用于从联系表单中收集信息并在单击提交按钮时发送电子邮件。

form.js

var contactForm = document.getElementById( 'contactForm' );
            new stepsForm( contactForm, {
                onSubmit : function( form ) {

                    // send email
                    var _subject = 'Contact Request';
                    var _email = contactForm.elements['q4'].value;
                    var _name = contactForm.elements['q5'].value;
                    var _message = contactForm.elements['q6'].value;

                    sendEmail(_name,_email,_subject,_message);

                }
            } );

您能告诉我缺少什么/错误吗? 谢谢。

【问题讨论】:

    标签: javascript node.js mandrill


    【解决方案1】:

    您不能从客户端调用您的后端函数。您可以使用 Jquery 进行 Ajax 调用,例如:

    $(document).ready(function(){
    
          $('#contactForm').submit(function(event) {
            event.preventDefault();
            var _subject = 'Contact Request';
            var _email = contactForm.elements['q4'].value;
            var _name = contactForm.elements['q5'].value;
            var _message = contactForm.elements['q6'].value;
    
            $.ajax({
              url: '/sendEmail',
              method: 'post',
              contentType: 'application/json',
              data: JSON.stringify({ subject: _subject, email: _email}),
              success: function(res) {
    
              }
            })
    
          })
    
    })
    

    在你的后端:

    // some lines skipped
    
    app.post('/sendEmail', function(req, res) {
    
         //do your stuff
    })
    

    【讨论】:

    • 谢谢。然后我尝试了以下操作,但它现在返回 404 错误:POST http://.../sendEmail 404 (Not Found)。这是我在后端添加的:app.post('/sendEmail',function(res,req){ mandrill('/messages/send', { message: { to: 'email@email.com', from: [{email: req.email , name: req.name}], subject: req.subject, text: req.message } }, function(error, response){ if (error) console.log( error ); else console.log(response); }); });
    • 这对我来说没有意义。你能发布你的完整代码
    • 这里是Gist
    • 你的路线应该是app.get('/sendEmail', function(req, res) {})而不是app.get('/sendEmail', function(res, req) {})
    • 你的意思是app.post('/sendEmail', function(res, req) {})?正如你之前提到的?
    猜你喜欢
    • 2016-07-04
    • 2019-04-23
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2015-06-23
    • 2018-10-17
    相关资源
    最近更新 更多