2015-02-03 9 views
9

이메일 첨부 파일 보내기는 Meteor의 공식 email package에서 아직 구현되지 않은 것 같습니다. nodemailer 제안 (here 참조)을 시도했지만 "정의되지 않은 'createTransport 속성을 읽을 수 없습니다."라는 오류가 발생했습니다.Meteor.js (이메일 패키지 및/또는 노드 메이터 또는 기타)로 이메일 첨부 파일 보내기

데이터 URI에 CSV 파일을 만든 다음 해당 첨부 파일을 보내려고합니다. 공식 이메일 패키지를 사용할 때 여기 내 코드의 조각이다 :

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

편집 :

여기

내 nodemailer 코드가 어떻게 생겼는지 기본적으로 :

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

을 시도이야? 유성우 공식 패키지에서 첨부 파일이 지원된다고 생각하지 않습니다. – rivarolle

+0

[이 패키지] (https://atmospherejs.com/mrt/meteor-nodemailer)를 사용하고 지침을 따라 달리기 (Meteor의 이메일과 매우 유사한 설정). 내 질문을 코드로 업데이트하겠습니다. –

+0

이 기사는 몇 가지 예제를 가지고 있습니다. http://kukuruku.co/hub/javascript/meteor-how-to-build-a-todo-list –

답변

5

충분하지 담당자가 의견을.

나는 Sendgrids NPM 패키지를 사용하여 첨부 문제를 해결했습니다.

npm install sendgrid 

유성 앱에 npm이 없으면 이것을 읽을 수 있습니다. 당신의 packages.json 서버에서 실행되는 파일에 다음

{ 
    "sendgrid": "1.4.0" 
} 

에서 https://meteorhacks.com/complete-npm-integration-for-meteor

: 여기

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

첨부 파일의 URL을 가져옵니다 샘플 유성 방법 (우리입니다 첨부 파일 컬렉션에서 S3 사용). 이 특정 방법은 원하는 수의 수신자에게 원하는 수의 첨부 파일을 보낼 수 있습니다. 여기에는 문맥에 맞는 논리가 있지만 첨부 파일을 보내고 실행하는 데 충분해야합니다.

중요한 부분 :

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

완전한 방법 예 : nodemailer 코드 당신이 무엇을

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