var SITE_URL = Meteor.absoluteUrl();

function sendEmailNotification(type, sourceUser, recipients, notificationObject) {
    var emailFrom = 'server@example.com';
    var emailSubject = 'MyApp: ';
    var emailBody = '';
    $.each(recipients, function (index, recipient) {
        recipients[index] = recipient + '@example.com';
    });

    switch(type) {
        case 'item_assigned':
            emailSubject += notificationObject.item_title;
            emailBody += '<div style="padding:10px;">';
            emailBody += sourceUser;
            emailBody += ' has assigned you an action item';
            emailBody += '</div>'
            break;
        case 'list_shared':
            emailSubject += notificationObject.list_title;
            emailBody += '<div style="padding:10px;">';
            emailBody += sourceUser;
            emailBody += ' has shared a list with you: ';
            emailBody += '<a href="' + SITE_URL + '#' + notificationObject.list_id + '">' + notificationObject.list_title + '</a>';
            emailBody += '</div>'
            break;
    }
    if (Meteor.isServer) {
        // This function only runs on server
        Email.send({
            from: emailFrom,
            bcc: recipients,
            subject: emailSubject,
            html: emailBody
        });
    }
}


上面的函数位于根目录下的JS文件中(因此其代码可用于客户端和服务器)。但是,当我在客户端代码中调用它时,什么也没发生。我的应用程序中包含email软件包。在我的本地计算机上(Windows 7),我没有设置MAIL_URL变量。因此,理想情况下,调用Email.send()函数应该在命令提示符下产生输出,但实际上没有任何输出。

在我们的生产服务器上,正确设置了SMTP,其他应用程序也可以发送具有相同设置的电子邮件。我已经在此处正确配置了MAIL_URL环境变量,但是仍然没有电子邮件被发送。

有人可以告诉我我的代码是否有问题?有什么我做不正确的事情吗?

P.S .:我什至尝试像下面的代码一样直接调用Email.send(),但仍然没有任何反应。

if (Meteor.isServer) {
    Email.send({
        from: 'server@example.com',
        to: 'my-gmail-id@gmail.com',
        subject: 'This is a test email',
        html: '<b>Congrats, it works!</b>'
    });
}



    }
});

最佳答案

几乎是Meteor's Email is undefined的副本

有关示例代码,请参见this pull request

需要澄清的是:Meteor不会像这样顺序执行客户端和服务器代码。您必须更加明确地了解客户端与服务器上正在运行的内容。不必考虑沿JavaScript页面进行线性执行,而应将流星代码的每一个作为事件的结果来运行。如果某些代码没有运行,那是因为没有事件触发它。

10-05 20:23
查看更多