【GAS】Google Apps Script からメールを送信する 

# これなに

ちょびちょびお仕事させていただいていたパートナーさんから「取引先に定型文を入れたメールを送りたい」という要望があがり、「ライトに作るなら GAS からメールを送ろうかな」と思い立ち、その際に GAS からメールってどうやって送るんだっけというものを調べたので、よく使いそうなものをまとめました。

※ [2023年7月頃に note に書いた記事](https://note.com/su3_hokkaido/n/n6213a6dec475)を移行しただけなのですが、基本的には変わっていないはず。ただ、もしかしたら細かいところが変わっている可能性あるのでその点はご容赦ください。

# 一番簡単な送り方

宛先のメールアドレス、件名、本文を設定して送ります。送信元のメールアドレスは Permission を許可した Google アカウントの Gmail アドレスが設定されます。

```js
function sendEmail() {
  let to = "sample@gmail.com";
  let subject = "テスト件名";
  let body = "本文です";

  GmailApp.sendEmail(to, subject, body);
}
```

# 送信元を変更する

以下のコードで optional に送信元を設定することができますが、デフォルトだとアカウントのメールアドレスしか使うことができません。

```js
function sendEmail() {
  let to = "sample@gmail.com";
  let subject = "テスト件名";
  let body = "送信元を設定してみました";
  let options = {from: "all@gmail.com"};

  GmailApp.sendEmail(to, subject, body, options);
}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819748/c23edcf6-e7e6-4cc4-b3d5-ae45aeb24b2f.png)

これは Gmail の Settings => All settings => Accounts and import タブへ移動し、Add another email address から送信元に設定したいアカウントを入力して設定すればOK。
ただし、本当に設定できるかどうかを設定したアカウントに対して Verification code を送ってくるので、その Verification code を入力しないと追加することができないです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819748/86288775-5248-433e-89dd-da194303ba65.png)

# CC または BCC を設定する

options に CC, BCC の項目を追加すると送信できます。

```js
function sendEmail() {
  let to = "sample@gmail.com";
  let subject = "テスト件名";
  let body = "CC, BCCを設定してみました";
  let options = {from: "all@gmail.com"
                , cc: "a1@gmail.com"
                , bcc: "b1@gmail.com"};

  GmailApp.sendEmail(to, subject, body, options);
}
```

# 複数アドレスを送信先として設定する

to, cc, bcc いずれも配列にすれば解決します。

```js
function sendEmail() {
  let to = ["sample1@gmail.com","sample2@gmail.com","sample3@gmail.com"];
  let subject = "テスト件名";
  let body = "宛先を複数設定してみました";
  let options = {from: "all@gmail.com"
                , cc: ["a1@gmail.com","a2@gmail.com","a3@gmail.com"]
                , bcc: ["b1@gmail.com","b2@gmail.com","b3@gmail.com"]};

  GmailApp.sendEmail(to, subject, body, options);
}
```

# ファイルを添付する

attachments オプションにファイルを指定すると添付可能です。配列形式にして添付すれば複数ファイルも送付可能。

```js
function sendEmail() {
  let to = ["sample1@gmail.com","sample2@gmail.com","sample3@gmail.com"];
  let subject = "テスト件名";
  let body = "ファイルを添付してみました";
  let attachedImg = DriveApp.getFileById("1u5u7yi9TCVLRyS_gVaVT0vUSSKgMfgty").getAs(MimeType.PNG);
  let options = {from: "all@gmail.com"
                , cc: ["a1@gmail.com","a2@gmail.com","a3@gmail.com"]
                , bcc: ["b1@gmail.com","b2@gmail.com","b3@gmail.com"]
                , attachments: [attachedImg]};

  GmailApp.sendEmail(to, subject, body, options);
}
```

ファイルを取得するには GAS を実行する Google アカウントの Google Drive にファイルを保存しておく必要があります。 上記のコードで指定しているファイルのIDは共有リンクから取得しましょう。なお、共有リンクは以下の形式で発行されますが、スクリプトコード内で指定しているIDは abc123 の部分です。

`https://drive.google.com/file/d/abc123/view?usp=sharing`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819748/4ecc92ec-a00e-4ab6-b950-98dcf72d755a.png)

また、ファイルを取得する際はファイルタイプを指定する必要があります。
代表的なものを列挙しておきます。

```text
JPEG // .jpg 形式
PNG // .png 形式
SVG // .svg 形式
PDF // .pdf 形式
ZIP // .zip 形式
CSV // .csv 形式
MICROSOFT_EXCEL // 通常のExcel, .xlsx 形式
MICROSOFT_EXCEL_LEGACY // 昔のExcel, .xls 形式
MICROSOFT_POWERPOINT // 通常の PowerPoint, .pptx 形式
MICROSOFT_POWERPOINT_LEGACY // 昔の PowerPoint, .ppt 形式
MICROSOFT_WORD // 通常の Word, .docx 形式
MICROSOFT_WORD_LEGACY // 昔の Word, .doc 形式
```

# 今回参考にしたページ

- [Workspace > Apps Script > Class Gmail App](https://developers.google.com/apps-script/reference/gmail/gmail-app)
- [Workspace > Apps Script > Enum MimeType](https://developers.google.com/apps-script/reference/base/mime-type)