Loading...

2023-12-20(æ°´) 15:00

📤 Google Apps Scriptでメール送信や下書き作成を行う

Google Apps Script
Google Apps Scriptでメールを送信したり、下書きを作成する方法について解説します。

目次

前提と注意事項

この記事では以下を前提としています。

  • Google アカウントを持っている

この記事のゴール

Google Apps Script を使って指定したメールアドレスにメール送信することと下書き作成をすることがこの記事のゴールとなります。
メール送信時には以下の内容を指定して送信します。

  • 送信先のメールアドレス
  • 件名
  • 本文
  • 添付ファイル
  • 送信元メールアドレス
  • 送信者名

また、メール送信はせずに以下のように下書きの作成のみも行います。

下書き作成

Google Apps Script でメール送信処理を実装する

ここでは、新しくスプレッドシートを作成し、そこから以下のように Google Apps Script を開きます。
シート内は空の状態で大丈夫です。

Google Apps Scriptを開く

以下のように Google Apps Script のエディタが開きます。

Google Apps Scriptのエディタ

ここで、sendEmailというメール送信処理用の関数を作成し、myFunctionというデフォルトの関数を修正してコード.gsの内容を以下のようにします。

コード.gs
function myFunction() {
  const target = {
    to: '[email protected]',
    name: '株式会社〇〇',
  };
  sendEmail(target);
}
 
// targetは以下とする
// { to: 送信先メールアドレス、name: 送信先会社名 }
//
function sendEmail(target) {
  // 送信元メールアドレスの指定(デフォルトだとGoogle Apps Script実行者のメールアドレス)
  // Google Apps Script実行者が持つメールアドレス、もしくはそのエイリアスのみ指定可能
  const _from = '[email protected]';
  const _subject = '弊社新サービスのご紹介';
  const _senderName = '株式会社Ritaiz';
 
  // メール用のテンプレートファイル読み込み(後述)
  let template = HtmlService.createTemplateFromFile('emailTemplate');
 
  // テンプレートemailTemplateにclientとしてtargetを渡す
  template.client = target;
 
  // テキストメール用本文
  // 受信側がHTML形式のメールに対応していない場合用
  const _textMessage = 'ご担当者 様 \n 弊社新サービスのご紹介です。';
 
  // clientを埋め込んだ状態のテンプレートをmessageに格納する
  let _htmlMessage = template.evaluate().getContent();
 
  const _options = {
    htmlBody: _htmlMessage,
    name: _senderName,
    from: _from,
  };
 
  // メール送信
  GmailApp.sendEmail(target.to, _subject, _textMessage, _options);
 
  // 下書き作成
  // GmailApp.createDraft(target.to, _subject,_textMessage,_options);
}

上記でmyFunctionを実行すると、sendEmail関数が実行されて、target内のtoに指定したメールアドレスにメールが送信されます。
上記のコメントを見るとおおよそ理解できるかと思います。メールの本文として、HTML 形式のメールを送信するために、emailTemplate.htmlというファイルを作成し、それを利用しています。このemailTemplate.htmlについて後述します。

アクセス権を許可する

初めてメール送信処理を実行すると、以下のように「承認が必要です」というダイアログが表示されます。ここで権限を確認をクリックします。

権限の確認

権限を確認をクリックすると以下のように Google アカウントの選択ができるので、メール送信に利用するアカウントを選択します。

Googleアカウントの選択

最後に以下のように Gmail へのアクセス許可を確認されるので許可をクリックします。

Gmailへのアクセス許可

これで以降は確認されずにメール送信処理が実行できるようになります。なお、後述する Google Drive 内のファイルを添付するなど、Gmail 以外に Google Drive のアクセスが必要な場合など、未許可のアクセスが必要になる場合はその都度確認されますが、同じ手順で許可することができます。

テンプレートファイルを作成する

HTML 形式のメールを送信するために、コード.gsと同じ階層にemailTemplate.htmlを作成します。
以下のように、「+」ボタンをクリックしてHTMLをクリックします。

HTMLファイルを作成する

ここではファイル名をemailTemplateとします。

ファイル名を入力する

ファイル名入力後に Enter を押すと、以下のようにファイルが作成されます。

ファイルが作成される

emailTemplateの中身を以下のようにします。メール本文は適当なものです。

emailTemplate.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body style="font-size: 10px;">
    <p><?= client.name ?> </br>ご担当者 様</p>
    <p>突然のご連絡失礼いたします。</br>
    弊社新サービスについてご紹介したくご連絡差し上げました。
    </p>
  </body>
</html>
 

上記で1つポイントとなるのが、<?= client.name ?>の部分です。これは、このemailTemplateの呼び出し元であるコード.gsのsendEmail関数内で以下のようにしてemailTemplateにclientという変数名でデータを渡しています。

emailTemplateに変数を渡す
// targetは以下とする
// { to: 送信先メールアドレス、name: 送信先会社名 }
//
function sendEmail(target) {
  //... 省略 ...//
 
  // メール用のテンプレートファイル読み込み(後述)
  let template = HtmlService.createTemplateFromFile('emailTemplate');
 
  // テンプレートemailTemplateにclientとしてtargetを渡す
  template.client = target;
 
  //... 省略 ...//
}

上記のようにすることでclientという変数をemailTemplate内で利用することができます。
<?= client.name ?>とすることで、clientの中のnameというプロパティを呼び出しています。また、clientにはその他のプロパティも含めることができるため、テンプレートファイルに埋め込みたい情報があれば、clientに含めておくことで使用できます。

メール送信はせず下書きを作成する

すでに前述したコードに含めていますが、メール送信ではなく下書きを作成する場合は、GmailApp.sendEmailの代わりにGmailApp.createDraftを利用するだけで OK です。

下書き作成
// メール送信
// GmailApp.sendEmail(target.to, _subject, _textMessage, _options);
 
// 下書き作成
GmailApp.createDraft(target.to, _subject, _textMessage, _options);

ファイルを添付する

以下のようにoptionsのattachmentsに添付ファイルを指定することでメールに Google Drive 内にあるファイルを添付することができます。

ファイルを添付する
//添付したいファイルのIDを指定(ファイルのID取得方法は後述)
let attachmentId = '1sqKN9CA188l-slkIQ0wQQ-9dU5duk2IS';
let attachment = DriveApp.getFileById(attachmentId);
 
const _options = {
  htmlBody: _htmlMessage,
  name: _senderName,
  from: _from,
  attachments: [attachment],
};

optionsのattachmentsは配列で渡せるため、以下のようにすれば複数のファイルを添付することもできます。

複数のファイルを添付する
//添付したいファイルのIDを指定(ファイルのID取得方法は後述)
let attachmentId = '1sqKN9CA188l-slkIQ0wQQ-9dU5duk2IS';
let attachment = DriveApp.getFileById(attachmentId);
 
let attachmentId2 = '1RWaAA1l9XUaKWQuMkbv6_CKSX8xNVYP9';
let attachment2 = DriveApp.getFileById(attachmentId2);
 
const _options = {
  htmlBody: _htmlMessage,
  name: _senderName,
  from: _from,
  attachments: [attachment, attachment2],
};

Google Drive 内のファイルの ID を取得する

Google Drive 内にあるファイルの ID は、以下のようにしてまず共有用のリンクをコピーします。

共有リンクを取得する

コピーしたリンクを確認すると以下のようになっており、1sqKN9CA188l-slkIQ0wQQ-9dU5duk2ISのような部分がファイルの ID になります。

ファイルのID
https://drive.google.com/file/d/1sqKN9CA188l-slkIQ0wQQ-9dU5duk2IS/view?usp=drive_link

まとめ

Google Apps Script を使用することで Gmail のメール送信や下書き作成を行うことができます。添付ファイルの送信も可能です。