6
3

More than 5 years have passed since last update.

【GAS】メール送信で「無効な引数です」が出てハマったのでメモする

Last updated at Posted at 2018-03-27

TL;DR

  • スプレッドシートを編集した際、スプレッドシートを編集した人のアドレスを送信元としてメールを送ろうとしたができなかった。
  • MailAppとGmailAppではoptionとして指定可能なものが違う。

状況

承認を管理するスプレッドシートがあり、承認されるとGAS経由でメールを規定の人に送信するように開発をした。
送信元がスクリプトオーナー(私)に固定されていたので、事務的なメールを開発部署の私が各営業部署にホイホイ通達する状況が発生。(開発中は気づかなかった)
ここで私、何を考えたか 送信元をシートの編集者にすればいいのでは?:thinking:と発想する。(前提が既に間違っている)

元のコード

宛先やタイトルは「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のメール送信の仕方や引数、取りえるオプションに違いがあるのかは分からなかった……。
「メールを送る」という観点だけで考えれば同じような気がするんだけど、セキュリティ的な理由なんだろうか :thinking:
GASプロがいたら教えてほしい。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3