2017-02-14 19 views
2

我試圖發送電子郵件到每個人在數組中。所以我需要每個人的電子郵件地址。我有一個收集人的姓名和電子郵件地址集合名爲Benutzer/benutzer。獲取每個人的電子郵件地址在數組中的流星

這是我在客戶端代碼:

Template.NeuesEvent.onCreated(function() { 
    this.subscribe('events'); 
    this.subscribe('friends'); 
    this.subscribe('benutzer'); 
}); 

Template.NeuesEvent.events({ 
    "submit .add-event": function(event){ 
     var Name = event.target.name.value; 
     var Beschreibung = event.target.beschreibung.value; 
     var Datum = event.target.Datum.value; 
     var Autor = Meteor.userId(); 
     var eingeladene = []; <-- this is the array 
      $.each($('.FreundeCheckbox:checked'), function(){    
       eingeladene.push($(this).val()); 
      }); 

     var email = Meteor.Benutzer.findOne({"email": eingeladene});<<------ 

     <<---- here i want to grab the email adress 


     if (Name == "") 
     { 
      confirm("Das Event braucht einen Namen ;)") 
     } 
     else { 

     Meteor.call('addEvent', Name, Beschreibung, Datum, eingeladene, Autor, email) <<-- 
<<------and paste the information here 

     event.target.name.value = ""; 
     event.target.beschreibung.value = ""; 
     FlowRouter.go('/meineEvents'); 

     return false; 
    } 
    } 
}); 

這是我method.js但電子郵件功能是不是在它裏面,但現在我已經知道該怎麼做

Meteor.methods({ 
    addEvent(Name, Beschreibung, Datum, eingeladene, Autor, email) { 
     Events.insert({ 
      Name: Name, 
      Beschreibung: Beschreibung, 
      erstelltAm: new Date(), 
      Datum: Datum, 
      Eingeladen: eingeladene, 
      Autor: Autor 
     }); 

SSR.compileTemplate('InviteEmail', Assets.getText('Invite-Email.html')); 
     var emailData = { 
      Name: Name, 
      Beschreibung: Beschreibung, 
      erstelltAm: new Date(), 
      Datum: Datum, 
      Eingeladen: eingeladene, 
      Autor: Autor 
     }; 

    Email.send({ 
     to: email, <<<-----everytime a new one 
     from: "[email protected]", 
     subject: "Einladung", 
     html: SSR.render('InviteEmail', emailData), 
     }); 
     } 
    }); 

所以現在你知道我嘗試做你能幫助我現在前兩個問題得到的電子郵件地址和第二如何循環的email.send功能與每一個的電子郵件地址再次

+1

我建議你只在客戶端使用'_id's。將一列用戶'_id'傳遞給Meteor.call(),讓服務器查找用戶並提取他們的電子郵件地址。這將避免將其他用戶電子郵件地址暴露給客戶端(更安全),並且會減少操作的延遲。不要忘記在你的方法中調用'this.unblock()'來避免阻塞其他請求的方法。 –

回答

0

請不要寫評論到代碼中沒有真正評論它:

錯誤:

var eingeladene = []; <-- this is the array

更好:

var eingeladene = []; // <-- this is the array 

記住,你的eingeladene是一個數組,這個沒有返回:

var email = Meteor.Benutzer.findOne({"email": eingeladene}); 

正確的方式做,這就是:

var email = Meteor.Benutzer.findOne({"email": {$in: eingeladene}}); 

無論如何,我會做什麼,我會發送電子郵件的陣列的方法和做事那裏。像這樣的東西。

Template.NeuesEvent.events({ 
    "submit .add-event": function(event){ 
     var Name = event.target.name.value; 
     var Beschreibung = event.target.beschreibung.value; 
     var Datum = event.target.Datum.value; 
     var Autor = Meteor.userId(); 
     var eingeladene = []; 
     $.each($('.FreundeCheckbox:checked'), function(){    
      eingeladene.push($(this).val()); 
     }); 

     // we dont't need email yet 

     if (Name == "") 
     { 
      confirm("Das Event braucht einen Namen ;)") 
     } 
     else { 

     // removed Autor and email here, since we don't need it 
     Meteor.call('addEvent', Name, Beschreibung, Datum, eingeladene); 

     event.target.name.value = ""; 
     event.target.beschreibung.value = ""; 
     FlowRouter.go('/meineEvents'); 

     return false; 
    } 
    } 
}); 

Meteor.methods({ 
    'addEvent': function(Name, Beschreibung, Datum, eingeladene) { 
     this.unblock(); 
     var Autor = Meteor.users.findOne(this.userId); 

     Events.insert({ 
      Name: Name, 
      Beschreibung: Beschreibung, 
      erstelltAm: new Date(), 
      Datum: Datum, 
      Eingeladen: eingeladene, 
      Autor: Autor 
     }); 

     SSR.compileTemplate('InviteEmail', Assets.getText('Invite-Email.html')); 
     var emailData = { 
      Name: Name, 
      Beschreibung: Beschreibung, 
      erstelltAm: new Date(), 
      Datum: Datum, 
      Eingeladen: eingeladene, 
      Autor: Autor 
     }; 

     // do you really need the fetch emails from the collection? 

     for (var i in eingeladene) { 
      var email = Meteor.Benutzer.findOne({"email": eingeladene[i]}); 
      if (!email) { 
       continue; 
      } 


      Email.send({ 
       to: email, <<<-----everytime a new one 
       from: "[email protected]", 
       subject: "Einladung", 
       html: SSR.render('InviteEmail', emailData), 
      }); 
     } 
    } 
}); 
+0

非常感謝您的幫助;)但是當我測試出來找到電子郵件地址我得到的錯誤:無法讀取未定義的財產「findOne」和互聯網並沒有告訴我的解決方案;(你是什麼意思真的取電子郵件我沒有提取任何東西或我錯了嗎? – Michael

+0

對不起,忘了它在第一個評論@iiro – Michael

+0

@Michael很難說,Perhas你應該導入一些文件,你的Meteor.Benutzer。定義在哪裏?收集到的定義/ lib目錄,以便客戶端和服務器看到他們 benutzer =新Meteor.Collection( 'benutzer'); 後來...... Benutzer.findOne(...) – iiro

相關問題