2017-12-20 24 views
1

지난 며칠 동안 클릭하여 답을 찾으려고했지만 나에게 맞는 것을 찾지 못하는 것 같습니다. (저를 용서하십시오, 나는 GAS에 상당히 새롭다). 약 12 명의 사용자가 사용할 수있는 Fantasy Golf Draft 시트를 만들려고 노력하고 있지만, 절반 이상이 Gmail 주소를 사용하지 않거나 기꺼이 사용하지 않습니다. 파일에 대한 액세스 권한은 문제가되지 않습니다. 스크립트를 실행하려고하면 문제가 발생합니다. 버튼/도형을 클릭하면 다음 사람에게 자동 이메일을 보냅니다. 스크립트의 기능은 스크립트를 승인 할 수있는 Google 계정이있는 나 자신이나 다른 사람이 올 때 작동합니다. Google 계정이없는 사람은 문제가 발생합니다.간단한 Google 앱 스크립트를 사용하는 방법 파일에 액세스하는 사람과 관계없이 소유자 계정의 스프레드 시트에서 메일 보내기

내 질문 - 버튼을 수정하거나 클릭하는 사람과 관계없이 내 전자 메일 또는 시트/스크립트 소유자의 전자 메일 만 보내도록 스크립트를 설정하려면 어떻게해야합니까? 이 스크립트를 웹 애플리케이션으로 작성하는 방법에 대한 링크가 있지만 빨리 사라집니다. [https://docs.google.com/spreadsheets/d/16AppcmrcuhatnzcEs7eIQyD_p1swbRimRZZ4FdbhBKI/edit?usp=sharing][1]

을 그리고 여기 내 메일 보내기 코드 :

은 여기 내 시트에 대한 링크의 어떤 도움을 크게 감상 할 수

function sendAlertEmails() { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    ss.setActiveSheet(ss.getSheetByName("Send Mails")); 
 
    var sheet = SpreadsheetApp.getActiveSheet(); 
 
    var dataRange = sheet.getRange("A2:f2"); 
 
    var data = dataRange.getValues(); 
 
    for (i in data) { 
 
    var rowData = data[i]; 
 
    var emailAddress = rowData[1]; 
 
    var recipient = rowData[0]; 
 
    var message1 = rowData[2]; 
 
    var message2 = rowData[3]; 
 
     var message3 = rowData[4]; 
 
      var message4 = rowData[5]; 
 
     var message = 'Hey ' + recipient + ',\n\n' + message1 + '\n\n' + ' The last player picked was ' + message2 + '\n\n' + message3 +'\n\n' + message4; 
 
    var subject = '*GOLF DRAFT 2018* - YOU ARE ON THE CLOCK'; 
 
    MailApp.sendEmail(emailAddress, subject, message); 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    ss.setActiveSheet(ss.getSheetByName("DRAFT")); 
 
    } 
 
    
 
}

!

답변

0

이 문제에 관심이 많았으며 이에 대해 조금 더 연구했습니다. 나는 요청을 받고 나서 게시물 요청으로 바꿨다.

다음은 Google 시트에있는 것입니다.

function sendAlertEmails() { 

     var ss = SpreadsheetApp.getActiveSpreadsheet(); 
     ss.setActiveSheet(ss.getSheetByName("Send Mails")); 
     var sheet = SpreadsheetApp.getActiveSheet(); 
     var dataRange = sheet.getRange("A2:f2"); 
     var data = dataRange.getValues(); 
     for (i in data) { 
     var rowData = data[i]; 
     var emailAddress = rowData[1]; 
     var recipient = rowData[0]; 
     var message1 = rowData[2]; 
     var message2 = rowData[3]; 
     var message3 = rowData[4]; 
     var message4 = rowData[5]; 
     var message = 'Hey ' + recipient + ',\n\n' + message1 + '\n\n' + ' The last player picked was ' + message2 + '\n\n' + message3 +'\n\n' + message4; 
     var subject = '*GOLF DRAFT 2018* - YOU ARE ON THE CLOCK';  
     var data = { 
     'name': 'Bob Smith', 
     'email': '[email protected]', 
     'message': message, 
     'subject': subject, 
     }; 
     var options = { 
      'method' : 'post', 
      'contentType': 'application/json', 
      'payload' : data 
     }; 

     var secondScriptID = 'STANDALONE_SCRIPT_ID' 
     var response = UrlFetchApp.fetch("https://script.google.com/macros/s/" + secondScriptID + "/exec", options); 
     Logger.log(response) // Expected to see sent data sent back 
     var ss = SpreadsheetApp.getActiveSpreadsheet(); 
     ss.setActiveSheet(ss.getSheetByName("DRAFT")); 
    // Browser.msgbox("Your Pick Has Been Made"); 
     } 
    } 

다음은 독립 실행 형 스크립트에있는 내용입니다. 독립형 스크립트 작업에 대한 몇 가지 단서 조항이 있습니다

    그것은 당신이 할 때마다 '도 익명의 누군가,'
  • 액세스로 설정해야한다 "는 웹 애플리케이션으로 배포"로 출판 될 필요가
  • 독립 실행 형 스크립트로 변경 한 후 다시 게시하고 프로젝트 버전을 새 것으로 변경하십시오. 이것은 첫 번째 시트 호출에서 최신 코드로의 호출입니다.

독립형 스크립트

function convertURItoObject(url){ 
     url = url.replace(/\+/g,' ') 
     url = decodeURIComponent(url) 
     var parts = url.split("&"); 
     var paramsObj = {}; 
     parts.forEach(function(item){ 
     var keyAndValue = item.split("="); 
     paramsObj[keyAndValue[0]] = keyAndValue[1] 
     }) 
    return paramsObj; // here's your object 
    } 


function doPost(e) { 

    var data = e.postData.contents; 
    data = convertURItoObject(data) 
    var recipient = data.email; 
    var body = data.message; 
    var subject = data.subject; 
    try { 
    MailApp.sendEmail(recipient, subject, body) 
    } 
    catch(e){ 
    Logger.log(e) 
    } 
    return ContentService.createTextOutput(JSON.stringify(e)); 

} 
+0

Jason에게 감사드립니다. 거대한 도움! 아주 멋진 것들. – saucepaws

0

아니요, 스크립트를 여러 사용자와 공유 할 수 있으며 스크립트 소유자 계정이 아닌 자신의 계정에서 항상 실행되며 스크립트는 실행중인 '보낸 사람 전자 메일 주소'를 사용하므로 사용자는 Google이 보안 정책으로 다른 사용자 계정의 이메일을 보내는 것을 허용하지 않습니다.

0

당신에게 속한 두 번째 스크립트를 사용할 수 있습니다. 첫 번째 스크립트에서 두 번째 스크립트로 가져 오기 요청을 보내면 두 번째 스크립트에서 계정에서 다른 사람에게 전자 메일을 보낼 수 있습니다. 두 번째 스크립트는 다음과 같습니다.

function doGet(e) {  
    var recipient = e.parameter.email; 
    var body = e.parmeter.message 
    var subject = "My golf thing" 
    try { 
    MailApp.sendEmail(recipient, subject, body) 
    } 
    catch(e){ 
    Logger.log(e) 
    } 
} 

첫 번째 스크립트는 이와 비슷한 가져 오기 요청이 필요합니다.

var response = UrlFetchApp.fetch("https://script.google.com/macros/s/SECOND_SCRIPT_ID/[email protected]&message=somthing"); 
    return response; 
+0

감사 제이슨. 여전히이 문제를 해결하는 데 어려움을 겪고 있습니다. 아마 이것에 관한 나의 머리 위의 작은 조각에. – saucepaws