使用Meteor.js发送电子邮件附件(电子邮件包和/或nodemailer或其他)



发送电子邮件附件似乎尚未在Meteor的官方电子邮件包中实现。我尝试了nodemailer建议(见此处),但收到错误"无法读取未定义的属性"createTransport"。

我正试图在数据URI中创建一个CSV文件,然后发送该附件。以下是我使用官方电子邮件包时的代码片段:

csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv);
var options = {
          from: "xxx@gmail.com",
          to: "xxx@gmail.com",
          subject: "xxx",
          html: html,
          attachment: {
            fileName: fileName, 
            path: csvData
            }
      };
Meteor.call('sendEmail', options);

编辑:

以下基本上是我的nodemailer代码的样子:

var nodemailer = Nodemailer;
var transporter = nodemailer.createTransport();
transporter.sendMail({
    from: 'sender@address',
    to: 'receiver@address',
    subject: 'hello',
    text: 'hello world!',
    attachments: [
        {   
            path: csvData
        }
    ]
});

没有足够的代表发表评论。

我最终通过使用Sendgrids NPM包解决了附件问题。

npm install sendgrid

如果你的流星应用程序中没有npm,你可以阅读这篇文章。https://meteorhacks.com/complete-npm-integration-for-meteor

在您的软件包中.json

{
  "sendgrid": "1.4.0"
}

然后在服务器上运行的文件中:

Meteor.startup(function(){
    process.env.MAIL_URL = 'smtp://<username>:<password>@smtp.sendgrid.net:587';
});

下面是一个示例流星方法,它从附件集合中获取附件的url(我们使用的是S3)。这种特殊的方法可以向任何数量的收件人发送任何数量的附件。这里有一些特定于上下文的逻辑,但它应该足以让您启动并运行发送附件。

重要部分:

var email = new sendgrid.Email();
email.setFrom("email@email.com");
email.setSubject("subject");
email.addFile({
    filename: attachment_name,
    url: attachment_url
});
sendgrid.send(email, function (err, json) {
    if (err) {
        console.error(err); 
    } 
    if (json) { 
        console.log(json.message);                   
    }
});

完整的方法示例:

Meteor.methods({
SendEmail: function (subject, message, templateNumber) {
    //console.log(subject, message, templateNumber);
    var user_id = Meteor.userId();
    var list = UserList.find({user_id: user_id}).fetch();
    var sentTemplate = sentTemplate + templateNumber;
    var counter = 0;
    console.log(list.length);
    // Track is the 'No Response' from the list.
    for (var i = 0; i < list.length; i++) {    
            var email = new sendgrid.Email();
            if (list[i].track == null || list[i].track == "1") {
                //email.addTo(list[0].list[i].Email);
                //console.log(list[0].list[i].Email);
                email.to = list[i].email;
            }
            email.setFrom(Meteor.user().email);
            email.replyto = Meteor.user().email;
            email.setSubject(subject);
            var firstName = list[i].name.split(" ")[0];
            var companyReplace = message.replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company).replace("{{Company}}", list[i].company);
            var nameReplace = companyReplace.replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name).replace("{{Name}}",list[i].name)
            var firstNameReplace = companyReplace.replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName).replace("{{FirstName}}",firstName);
            email.setHtml(firstNameReplace);
            var numAttachments = Attachments.find({user_id: Meteor.userId()}).fetch().length;
            var attachments = Attachments.find({user_id: Meteor.userId()}).fetch();
            console.log("**********Attachments****************");
            console.log(attachments);
            console.log("**********Attachments****************");
            for (var t = 0; t < numAttachments; t++) {
                email.addFile({
                    filename: attachments[t].attachment_name,
                    url: attachments[t].attachment_url
                });
            }
            sendgrid.send(email, function (err, json) {
                if (err) {
                    console.error(err);
                } 
                if (json) {
                    console.log(json.message);
                }
            });
            //console.log(email);
    } // end for loop
    if (templateNumber == 1) {
        Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate1": true}});
    }
    if (templateNumber == 2) {
        Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate2": true}});
    }
    if (templateNumber == 3) {
        Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate3": true}});
    }
    if (templateNumber == 4) {
        Meteor.users.update({_id:Meteor.userId()}, {$set: {"sentTemplate4": true}});
    }
    // for each email. replace all html
   return list.length;
}
});

相关内容

  • 没有找到相关文章

最新更新