Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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プロがいたら教えてほしい。

S-Elly
嫌いなものは2n件法質問紙です。
mediado
私たちメディアドゥは、電子書籍を読者に届けるために「テクノロジー」で「出版社」と「電子書店」を繋ぎ、その先にいる作家と読者を繋げる「電子書籍取次」事業を展開しております。業界最多のコンテンツラインナップとともに最新のテクノロジーを駆使した各種ソリューションを出版社や電子書店に提供し、グローバル且つマルチコンテンツ配信プラットフォームを目指しています。
https://mediado.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした