勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

GASとGmailを連携させて受信メール検索及びメール送信

  Google Apps Script Google

Google Apps ScriptとGmailを連携させてみたい。「未読かつ特定のアドレスから受信」というように条件指定したメールを検索したり、GAS経由でGmailを送信する(ついでにGoogleドライブと連携してファイル添付する)方法をメモ。

 

メール関連のリファレンス

https://developers.google.com/apps-script/reference/gmail/

 

受信メールを条件指定検索

ソース

function getMail(){
	//検索キーワード指定
	//未読を検索
	const query = 'is: unread';

	//送信元メールアドレスを指定して検索
	//const query = 'from: hoge@hoge.jp';

	//件名を指定して検索
	//const query = 'subject: メール件名';

	//未読かつメールアドレス指定で検索
	//const query = 'is: unread from:hoge@hoge.jp';

	//開始行
	const start = 0;

	//終了行
	const max = 10;

	//メールの検索
	const threads = GmailApp.search(query, start, max);

	//メールの取得
	const messagesForThreads = GmailApp.getMessagesForThreads(threads);

	for(const messages of messagesForThreads){
		//メール件名
		console.log(messages[0].getSubject());

		//メール本文
		console.log(messages[0].getBody());
	}
}

注意点

GASの利用制限ページを見るとGmailの読み書きは20,000件/日(無料アカウントの場合)と余裕があるように見えるが、以下記事を見る限りではそうでもないっぽい。

https://tonari-it.com/gas-gmail-search-limit/#toc2

件数指定やある程度条件で絞り込んで運用する必要あり。

 

メール送信

ソース

//メール送信
function sendMail(){
	//送信先メールアドレス
	const recipient = 'hoge@hoge.jp';

	//メール件名
	const subject = 'テストメール件名';

	//メール本文
	const body = "メール本文\n改行\nメール本文";

	//添付ファイルのフォルダ指定
	const folder = DriveApp.getFolderById('xxxxxxxxxxxxxxxx');

	//添付ファイル指定
	const file = folder.getFilesByName('test.pdf').next()

	//メール送信
	GmailApp.sendEmail(recipient, subject, body, {attachments: [file]}) 
}

Googleドライブのフォルダ指定

Googleドライブでフォルダを作成し、ブラウザからアクセスすると「https://drive.google.com/drive/folders/xxxxxxxxxxxx」のようなURLになる。「xxxxxxxxxxxx」の部分を「const folder = DriveApp.getFolderById('xxxxxxxxxxxxxxxx');」に指定する。

送信上限数

無料アカウントの場合、100件/日とかなり少ない点に注意する。可能な限り送信内容はまとめて送信件数を減らすか、以下のようなLINE通知にする形を取るほうが良さそう。

GASとLINEを連携させて通知メッセージを送る方法のメモ

所感

受信メールの条件指定検索は「未読かつ対応優先順位が高いアドレスからのメール」があればLINEに通知を送る等で個人ツールとしては使えそう。メール送信の方は上限が低い為、使いどころが難しい。

 - Google Apps Script Google

  関連記事

GASで祝日一覧(年月日と祝日名)データをJSON出力するAPIを作成

PHPのシステム案件で祝日を取得し、処理を行う箇所があった。Googleカレンダ ...

GASとGoogleカレンダを連携し暦通りではない店休日を取得する方法

小売店等のサイトで営業日カレンダーみたいなものを表示させる際に今まではPHPで管 ...

GASを利用してGmailに届いたメール内容をGoogleスプレッドシートに記入する方法

WordPressのContact Form7から送信した内容をGmailで受け ...

GASで「小説家になろう」サイトの更新通知をLINEに送る方法

Google Apps Scriptの勉強として「小説家になろう」サイトの特定小 ...

GASのプログラム実行時間計測方法と各種制限についてのメモ

PHP等でプログラムを組んでいると、あまり実行時間について気にすることはなかった ...