GoogleActionScript(GAS)を使ってお問い合わせフォームを作る(ときの罠)

参照:Google Apps ScriptのMailAppとフォームからのメール自動送信あれこれ

参照:GoogleAppsScript を実行するためのアカウント

単純な会社宛のお問い合わせフォームをGoogleAppsのスプレッドシート&フォームで作ろうと思ったんですが、 フォームを作るだけは超簡単。これはいいよ。

 

しかし、困った点があってそれの解決策が見当たらず探しきった結果、 クソ仕様すぎて憤慨の極みです。

やりたかったこと

MailApp.sendEmailという用意されているメソッドを使ってメール配信するわけなんですが、 色々設定をoptionで後から渡せるのですが、なんでか「from」だけ項目が用意されていません

トラブルポイント

デフォルトだとそのドキュメント(つまりフォームやスプレッドシートを作ったGoogleAppsアカウント)が、 各自への自動返信メールの出し元(=From)になってしまいます。

 

具体例:

  1. cyborgninja というGoogleAppsアカウントでログインする
  2. フォーム(とスプレッドシート)を作成する => 名前とメールアドレス、要件の3つぐらい
  3. スクリプトエディタを起動してスクリプトを作成
  4. フォームのテスト送信
  5. 自動返信メールの出し元(=FROM)に「cyborgninja」と書かれている
  6. no-replyさんとかinfoさんとかsupportさんとかにしたいなぁ
  7. 調べる
  8. お、nameという設定がある。設定してみよう!
  9. cyborgninja(cyborgninja@cyborg-ninja.com) => no-reply(cyborgninja@cyborg-ninja.com)
  10. メアド変わってねぇ・・・orz
  11. FROMのアドレスは変更できないことを知る <= ここまで4時間コース

どうするのか?

参照:Google Apps ScriptのMailAppとフォームからのメール自動送信あれこれ

自動送信メールの送信者メールアドレスを変更するには Class MailApp::sendEmailにも引数一覧が書かれていますが、送信者メールアドレス(From:)を指定できません。送信者は自動的にスクリプト実行者のGoogleアカウントとなります。つまり送信者を変更したい時には、別のGoogleアカウントに対してそのスクリプトを共有し、そのアカウントから開いて、スクリプト実行のトリガーを設定することになります。ふつうは、フォーム送信時に設定することが多いでしょう。

 

スクリプトを実行するユーザーのアカウントがFROMとして使われてしまうため、 トリガー設定をするにも、自分のアカウントではなく第三者的な(ここではno-replyさん)を作って、そいつが発火しないといけませぬ。

 

参照:GoogleAppsScript を実行するためのアカウント

スクリプトのオーナー権を譲渡すればとも思いますが、 じつは スクリプト自体のオーナー権は譲渡できない ようなのです。

 

結局オーナー権をその第三者的な人(ここではno-replyさん)が持っている状態で作らないとFROMの変更が出来ません。 で、書いてあるとおりでオーナー権の移譲も出来ないため作り直しです。

 

 

なんでこんな面倒な仕様にしたのか。

 

 

StackoverflowなどのQAサイトでも「なんで出来ないんだ!」ってやたら質問があがっているのに、公式に対応されてないところを見ると何か理由があるんでしょう(スパム対策とかかな?多分)。

しかし、作り直しだぜ。。。。トホホ。

 

覚えておいてほしいこと

  • 後からFROMの設定を変更できない
  • FROMのデフォルトはオーナーのGoogleAppsアカウント
  • 先にオーナーを決めておく必要があるので、admin@とかinfo@とかdev@とかno-reply@とかGASるアカウントを決めとくといいと思う

 

尚、管理者にメールするだけ であれば、各自のアカウントでこの回答スプレッドシートで ツール > 通知ルール で設定するだけです(僕は各自アカウントで設定してもらうのが超絶面倒なんでやりませんが)

機械忍者

某SEO会社(?)勤務。 多分日本語よりHTMLの方が得意です。 最近はRubyとかいうキラキラな言語も勉強中です。 SEOはもう標準スキルになってきてると思うので正直もうあんまり昔ほどの熱意は感じません。 新たに躍動してる人も多いですしね。 だれか強化骨格コスプレあったら教えてください。