はじめに
PHPで書いたフルスクラッチの問い合わせフォームを、Googleフォームにリプレースしました。
Googleフォームへの移行は簡単だったのですが、自動返信メールのFromアドレスを任意のメールアドレスに変更する際少し手間取ったので共有します。
前提
- この記事では、Googleフォームの作成方法には言及しておりません。
- また、Googleフォームの自動返信には3つのやり方がありますが、Google Apps Script(GAS)の利用が前提です。
サマリー
- Googleフォームの自動返信メールで、Fromに任意のアドレスを設定することは可能。
- ただし、GASの利用が必須で、設定できるのは実在する確認済みアドレスのみ。
目次
- GASのMailAppクラスリファレンスにはFromアドレスの設定がない
- Fromを任意のアドレスに変更するには、Gmail設定でアドレス追加が必要
- GASのMailAppクラスで「from」オプションを追加する
GASのMailAppクラスリファレンスにはFromアドレスの設定がない
GASで自動返信メールを送信すると、デフォルトではGoogleフォームを作成したGoogleアカウント(Gmailアドレス)がFromアドレスになります。
これを任意のアドレスに変更しようと、MailAppクラスのリファレンスを見ましたが、Fromアドレス設定に関する記述がありません。
送信者の名前は[name]で設定できるのにFromアドレスの指定はできません。
過去のブログなどではoptionにfromを設定している記事もあり、最初はそのように記述してみました。
var to = 'support@hogefuga.com';
var subject = 'お問合せがありました';
var body = 'お問合せを受信しました。';
var from_address = 'contact@hogefuga.com';
var from_name = 'お問合せフォーム';
var options = {from: from_address, name: from_name};
GmailApp.sendEmail(to, subject, body, options);
この記述で実行すると、以下のエラーが出ます。
from記述を外すと正常に動作するので、fromのオプション自体が無くなった可能性を考えました。
Fromを任意のアドレスに変更するには、Gmail設定でアドレス追加が必要
色々探したところ、以下の記事を見つけました。
※TeraDasの@hiromo6様ありがとうございます
この記事によると、optionに[from]を設定する場合は 確認済みのアドレス である必要があるとのこと。
確認済みアドレスは、Gmailの設定でメールアドレスを追加することで登録できます。
1. Gmail > 設定を開く
(すべての設定が非表示の場合、すべての設定を表示をクリック)
2. アカウントとインポート > 他のメールアドレスを追加
3. 自分のメールアドレスを追加
(ここでの「名前」は送信者名にはならないので注意)
4. [Gmailアドレスの場合] 確認メールの送信
4. [Gmail以外の場合] smtpサーバ、メールアカウント情報の入力
(認証が通れば確認メールが送信される)
5. [共通] 確認メールを受信
(承認URLをクリック or 確認コードを控える)
6. [共通] 確認コードの場合は、確認フォームに入力
上記の設定が終わると、Gmail > 設定 > アカウントとインポート に確認済みのアドレスが表示されます。
このアドレスが、GASのMailAppでfromに指定できるようになります。
GASのMailAppクラスで [from] オプションを追加する
サンプルコードを掲載します。
サンプルでは送信者名(name)を指定していますが、Fromの名前は[確認済みアドレス]の名前(GmailならGmailのプロフィール氏名、Gmail以外ならメールアカウントに紐づいた氏名など)で送信されます。
function onFormSubmit(){
var formId = 'GoogleフォームID';
var form = FormApp.openById(formId);
var formResponses = form.getResponses();
var message = '';
var username = '';
var usermail = '';
var from_address = 'support@hogefuga.com';
var count = formResponses.length;
count--;
var itemResponses = formResponses[count].getItemResponses();
for (var i=0; i < itemResponses.length; i++) {
var question = itemResponses[i].getItem().getTitle();
var answer = itemResponses[i].getResponse();
if (question == '名前'){
username = answer;
}
if (question == 'メールアドレス'){
usermail = answer;
}
message += question + ': ' + answer + '\n';
}
/* 管理者宛メール送信設定 */
var admin_to = 'support@hogefuga.com';
var admin_subject = 'お問合せがありました';
var admin_body = '下記の内容で、お問合せを受信しました。\n\n'
+ message
var admin_options = {from: from_address, name: 'お問合せフォーム', replyTo: usermail};
GmailApp.sendEmail(admin_to, admin_subject, admin_body, admin_options);
/* ユーザー宛メール送信設定 */
var subject = 'お問合せを受付けました';
var body = username
+ ' 様\n\n'
+ 'この度は、お問合せいただきありがとうございます。\n'
+ '下記の内容で、受け付けました。\n'
+ '後ほど折り返しご連絡いたしますので、いましばらくお待ちください。\n\n'
+ message
+ '\n\n'
+ '----------\n'
+ 'HogeFuga Inc.\n'
+ 'https://hogefuga.com'
+ '\n\n※このメールはお問い合わせフォームからの自動返信です。';
var options = {from: from_address, name: 'HogeFugaお問合せフォーム'};
GmailApp.sendEmail(usermail, subject, body, options);
}
これで自動返信メールのFromアドレスに任意のアドレスを設定できるようになりました。
参考