डेटा और ईमेल सूची दो अलग-अलग शीट में

Aug 18 2020

मेरे पास बैकएंड शीट में डेटा है और मेरे पास सब्सक्राइबर्स शीट पर ईमेल सूची है , लेकिन ईमेल को सूची में नहीं भेजा जाता है, मैं कहाँ गलत हो गया?

function sendEmail(e) {
var thisSheet = e.source.getActiveSheet();
if (thisSheet.getName() !== 'Backend' || e.range.columnStart !== 17 || e.range.rowStart == 1 || e.value !== 'LOCAL') return;
var body, headers = thisSheet.getRange(1, 1, 1, 6)
    .getValues()[0],
    thisRow = thisSheet.getRange(e.range.rowStart, 1, 1, 6)
    .getValues()[0],
    vehicle = thisRow[3],
    vehicle2 = thisRow[4],
    subject = "⚫ Vehicle Ready "+vehicle +" "+vehicle2
    
    var emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues();
    
    body = "<i>The following vehicle is ready after wash</i><br><br>",
    i = 0;
while (i < 6) {
    body += '<font style="font-size:14px;color:grey;font-family: Arial">'+headers[i] +'</font>'+' - <b><font style="font-size:14px;font-family: Arial">' + thisRow[i] +'</font></b><br><hr width="30%" align="left" Color="#bfbfbf" size="0.75">';
    i++;
}

MailApp.sendEmail (ईमेललिस्ट, विषय, शरीर, {htmlBody: शरीर, नाम: "कंपनी"}); }यहाँ कोड दर्ज करें

जवाब

1 Tanaike Aug 18 2020 at 12:40

इस संशोधन के बारे में कैसे?

संशोधन अंक:

  • द्वारा प्राप्त मूल्यों getValues()को 2 आयामी सरणी है। आपके मामले में, emailListकी var emailList = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Subscribers").getRange("A2:A").getValues()तरह है [["email1"],["email2"],,,]। और साथ ही, "A2: A" श्रेणी के मामले में, कोई भी मूल्य शामिल नहीं किया जा सकता है।
  • पर MailApp.sendEmail(recipient, subject, body, options), recipientएक स्ट्रिंग है।

उपरोक्त बिंदुओं से, ऐसी त्रुटि होती है। जब आप ईमेल को सभी ईमेल में भेजना चाहते हैं emailList, तो लूप का उपयोग करना आवश्यक है। या, जब आप में ईमेल का उपयोग करना चाहते emailListके रूप में cc, यह पाश उपयोग करने के लिए आवश्यक नहीं है। तो यहाँ, मैं निम्नलिखित 2 पैटर्न का प्रस्ताव करना चाहूंगा।

पैटर्न 1:

इस पैटर्न में, सभी ईमेल emailListका उपयोग किया जाता है recipient

संशोधित स्क्रिप्ट:

जब आपकी स्क्रिप्ट को संशोधित किया जाता है, तो कृपया निम्नानुसार संशोधित करें।

से:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
सेवा:
emailList.forEach(([email]) => {
  if (email != "") {
    MailApp.sendEmail(email, subject, body, {htmlBody: body, name: "company"});
  }
})

पैटर्न 2:

इस पैटर्न में, सभी ईमेल emailListका उपयोग किया जाता है cc

संशोधित स्क्रिप्ट:

जब आपकी स्क्रिप्ट को संशोधित किया जाता है, तो कृपया निम्नानुसार संशोधित करें।

से:
MailApp.sendEmail(emailList, subject, body, {htmlBody: body, name: "company"});
सेवा:
MailApp.sendEmail("email address", subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});

या

MailApp.sendEmail(null, subject, body, {htmlBody: body, name: "company", cc: emailList.filter(String).toString()});
  • इस स्थिति में, जब nullइसका उपयोग किया जाता है recipient, तो ईमेल में ईमेल का पता शामिल नहीं होता है to

ध्यान दें:

  • कृपया V8 को सक्षम करने के साथ इस संशोधित स्क्रिप्ट का उपयोग करें।

संदर्भ:

  • getValues ​​()
  • sendEmail (प्राप्तकर्ता, विषय, निकाय, विकल्प)