TL;DR
- スプレッドシートを編集した際、スプレッドシートを編集した人のアドレスを送信元としてメールを送ろうとしたができなかった。
- MailAppとGmailAppではoptionとして指定可能なものが違う。
状況
承認を管理するスプレッドシートがあり、承認されるとGAS経由でメールを規定の人に送信するように開発をした。
送信元がスクリプトオーナー(私)に固定されていたので、事務的なメールを開発部署の私が各営業部署にホイホイ通達する状況が発生。(開発中は気づかなかった)
ここで私、何を考えたか **送信元をシートの編集者にすればいいのでは?**と発想する。(前提が既に間違っている)
元のコード
宛先やタイトルは「mailSetting」に既に設定済とする
mailSetting.from = Session.getActiveUser().getEmail(); MailApp.sendEmail(mailSetting); //送信元は私のまま
動かない…!!
そもそも間違っている点としてはMailApp
を使用している点で、from
を指定するためにはGmailApp
を使わないといけない。
以下のように書き換え。
mailSetting.from = Session.getActiveUser().getEmail(); //別の人に操作してもらってテスト GmailApp.sendEmail("宛先", "件名", "内容", {from : mailSetting.from}); //Exception:無効な引数です
まだ動かない…!!!
「無効な引数です」は、例えばJavaなどでよく見る「この変数の型を間違えている」ということではなく、「このアドレスがメールの送信元として使えない」ということが正しい。
詳しくはこの記事に載っていたのだけど、ようは「メールの送信元は前提としてスクリプトオーナーが基準」であり、「そこから参照として正しく設定したメールアドレスのみが送信元として使用可能」なのだ、ということでした。
私は「スクリプトオーナーが基準である」を、「実行者が基準である」と勘違いしていたので長いことハマってしまった……。
結局私のアカウントに連絡用のメーリングリストをエイリアス設定して、以下の感じになった。
var alia = GmailApp.getAliases(); //スクリプトオーナーのアカウントのエイリアスされたアドレスが載っている配列 GmailApp.sendEmail("宛先", "件名", "内容", {from : alia[0]}); //Successfully sent!!!
モヤ
docsを読んでもなぜMailAppとGmailAppのメール送信の仕方や引数、取りえるオプションに違いがあるのかは分からなかった……。
「メールを送る」という観点だけで考えれば同じような気がするんだけど、セキュリティ的な理由なんだろうか
GASプロがいたら教えてほしい。