서로 다른 두 시트의 데이터 및 이메일 목록

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 (emailList, subject, body, {htmlBody : body, name : "company"}); }여기에 코드를 입력하시오

답변

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 :

이 패턴에서의 모든 이메일 emailListrecipient.

수정 된 스크립트 :

스크립트 수정시 다음과 같이 수정하십시오.

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

패턴 2 :

이 패턴에서의 모든 이메일 emailListcc.

수정 된 스크립트 :

스크립트 수정시 다음과 같이 수정하십시오.

에서:
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 (받는 사람, 제목, 본문, 옵션)