2017-12-20 8 views
1

私はここ数日間、クリックして回答を探していますが、私にとって意味のあるものは見つけられないようです(私を許して、私はGASをかなり新しくしている)。私は約12人のユーザーが使用するFantasy Golf Draftシートを設定しようとしていますが、その半数以上はGmailアドレスを使用していない/していません。ファイルへのアクセス権は問題ありません。スクリプトを実行しようとしているところです。ボタン/シェイプをクリックすると、次に選択する人に自動メールが送信されます。スクリプトの機能は、自分自身やスクリプトなどの権限を付与できるGoogleアカウントを持っているユーザーから来ているときに機能しています.Googleアカウントを持たないユーザーは、問題に遭遇します。シンプルなGoogle Appsスクリプトでは、ファイルにアクセスしている人に関係なく、オーナーアカウントからスプレッドシートからメールを送信します

私の質問 - 誰がボタンを修正/クリックしているかにかかわらず、自分の電子メール、またはシート/スクリプト所有者の電子メールからのみ送信するようにスクリプトを設定するにはどうすればよいですか?これを行うためのスクリプトを作成するためのリンクがwebappとして表示されていますが、すぐに失われます。

は、ここに私のシートへのリンクです: [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"); 
     } 
    } 

以下は、スタンドアロンスクリプトの内容です。スタンドアロンスクリプトの作業にいくつかの但し書きがあります

    それはあなたが作るたびに「でも匿名の誰でも、」
  • アクセスに設定する必要があり、「Webアプリケーションとして配布」の下で公開する必要があります
  • スタンドアロンスクリプトへの変更をもう一度発行し、 プロジェクトのバージョンを新しいものに変更します。これは、最初のシート呼び出しから最新のコードへの呼び出しです。

スタンドアロンスクリプト

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

あなたに属する2番目のスクリプトを使用できます。最初のスクリプトからフェッチ要求を2番目のスクリプトに送信し、2番目のスクリプトはアカウントから誰にでも電子メールを送信できます。 2番目のスクリプトは次のようになります。

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

関連する問題