Googleフォームの自動返信メールで任意のFromアドレスを設定する（Google Apps Script）

## はじめに
PHPで書いたフルスクラッチの問い合わせフォームを、Googleフォームにリプレースしました。
Googleフォームへの移行は簡単だったのですが、自動返信メールのFromアドレスを任意のメールアドレスに変更する際少し手間取ったので共有します。

## 前提
* この記事では、Googleフォームの作成方法には言及しておりません。
* また、Googleフォームの自動返信には3つのやり方がありますが、Google Apps Script（GAS）の利用が前提です。

## サマリー
* Googleフォームの自動返信メールで、Fromに任意のアドレスを設定することは可能。
* ただし、GASの利用が必須で、設定できるのは実在する確認済みアドレスのみ。

## 目次
1. GASのMailAppクラスリファレンスにはFromアドレスの設定がない
2. Fromを任意のアドレスに変更するには、Gmail設定でアドレス追加が必要
3. GASのMailAppクラスで「from」オプションを追加する

## GASのMailAppクラスリファレンスにはFromアドレスの設定がない
GASで自動返信メールを送信すると、デフォルトではGoogleフォームを作成したGoogleアカウント（Gmailアドレス）がFromアドレスになります。
これを任意のアドレスに変更しようと、MailAppクラスのリファレンスを見ましたが、Fromアドレス設定に関する記述がありません。

https://developers.google.com/apps-script/reference/mail/mail-app

![MailAppリファレンス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/9df65f6d-1e80-7208-ea4d-51f92ca5e32e.png)

送信者の名前は[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);
```

この記述で実行すると、以下のエラーが出ます。

![エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/df358ba4-5ff2-9149-d102-efa3274759f8.png)

from記述を外すと正常に動作するので、fromのオプション自体が無くなった可能性を考えました。


## Fromを任意のアドレスに変更するには、Gmail設定でアドレス追加が必要
色々探したところ、以下の記事を見つけました。
※TeraDasの@hiromo6様ありがとうございます

https://www.teradas.net/archives/14770/

この記事によると、optionに[from]を設定する場合は **確認済みのアドレス** である必要があるとのこと。
**確認済みアドレス**は、Gmailの設定でメールアドレスを追加することで登録できます。


#### 1. Gmail &gt; 設定を開く
（すべての設定が非表示の場合、**すべての設定を表示**をクリック）

![1_Gmail_設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/2e8594cc-f50d-00e6-037a-cd45974c746b.png)


#### 2. アカウントとインポート &gt; 他のメールアドレスを追加

![2_Gmail_アカウント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/d42a851c-1d37-d396-f16e-9f4a105c7453.png)


#### 3. 自分のメールアドレスを追加
（ここでの「名前」は送信者名にはならないので注意）

![3_アカウント追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/601f6408-953e-84f1-c0ff-08da50f02cec.png)


#### 4. [Gmailアドレスの場合] 確認メールの送信

![5_確認メール送信.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/1c4c4025-a61a-d27b-9a8f-ca0965ee96e2.png)


#### 4. [Gmail以外の場合] smtpサーバ、メールアカウント情報の入力
（認証が通れば確認メールが送信される）

![4_smtp設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/aab6a2d2-04a1-0739-2cec-b88fb26a1d35.png)


#### 5. [共通] 確認メールを受信
（承認URLをクリック or 確認コードを控える）

![7_確認メール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/4b21528f-f28d-a715-2a8f-c69c785bd50f.png)


#### 6. [共通] 確認コードの場合は、確認フォームに入力

![6_確認コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/0031d797-aaf0-4f48-0052-6e0335bba550.png)


上記の設定が終わると、Gmail &gt; 設定 &gt; アカウントとインポート に**確認済みのアドレス**が表示されます。
このアドレスが、GASのMailAppでfromに指定できるようになります。

![8_追加後の状態.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1780518/55184c47-ebeb-0b0a-118e-aa8508b72f08.png)


## 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アドレスに任意のアドレスを設定できるようになりました。


## 参考

https://www.teradas.net/archives/14770/

https://celvie.info/outlook-gmail/