2015-02-03 54 views
9

E-posta eklerinin gönderilmesi, Meteor'ın resmi email package numaralı telefonunda henüz uygulanmadı gibi görünüyor. Nodemailer önerisini denedim (here görüldü), ancak "Tanımsız" özelliğine sahip 'createTransport' özelliği okunamıyor "hatası alındı.Meteor.js ile e-posta ekleri gönderme (e-posta paketi ve/veya nodemailer veya başka şekilde)

Veri URI'sinde bir CSV dosyası oluşturmaya çalışıyorum ve daha sonra bu eki gönderin. resmi e-posta paketini kullanırken İşte benim kod snippet'idir var:

csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv); 

var options = { 
      from: "[email protected]", 
      to: "[email protected]", 
      subject: "xxx", 
      html: html, 
      attachment: { 
      fileName: fileName, 
      path: csvData 
      } 
     }; 

Meteor.call('sendEmail', options); 

DÜZENLEME:

İşte

benim nodemailer kod neye benzediğini temelde:

var nodemailer = Nodemailer; 
var transporter = nodemailer.createTransport(); 
transporter.sendMail({ 
    from: '[email protected]', 
    to: '[email protected]', 
    subject: 'hello', 
    text: 'hello world!', 
    attachments: [ 
     { 
      path: csvData 
     } 
    ] 
}); 
+0

denedi? Eklerin meteor resmi paketinde desteklendiğine inanmıyorum. – rivarolle

+0

[bu paket] 'i kullandım (https://atmospherejs.com/mrt/meteor-nodemailer) ve onu çalıştırmaya yönelik talimatları takip ettim (Meteor'ın e-postasına oldukça benzer bir kurulum var). Sorumu koduyla güncelleyeceğim. –

+0

Bu makalede bazı örnekler vardır: http://kukuruku.co/hub/javascript/meteor-how-to-build-a-todo-list –

cevap

5

yeterli temsilcisi yorum yapmak.

Sendgrids NPM paketini kullanarak ek sorununu çözdüm.

npm install sendgrid 

Eğer meteor uygulamasında npm yoksa, bunu okuyabilirsiniz. senin packages.json sunucuda çalışan bir dosyada Sonra

{ 
    "sendgrid": "1.4.0" 
} 

yılında https://meteorhacks.com/complete-npm-integration-for-meteor

: Burada

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

Bir ekin url alır örnek bir meteor yöntemi (biziz Bir eklenti koleksiyonundan S3 kullanıyorsunuz. Bu özel yöntem, herhangi bir sayıda alıcıya herhangi bir sayıda eki gönderebilir. Burada belirli bir bağlamsal mantık var, ancak sizi eklemeye ve gönderen ekleri çalıştırmaya yetecek kadar olmalı.

önemli kısmı:

var email = new sendgrid.Email(); 
email.setFrom("[email protected]"); 
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);     
    } 
}); 

Tam bir yöntem örneği: nodemailer kodu ne

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; 
} 
});