Gmailで件名やLabelを指定したメールの本文から値を取得しスプレットシートに書き出すGASのコード
目的:特定の受信メールの本文から一部切り取りスプレットシートにまとめたかったため作成
function xdemygetbody() {
// 検索条件に該当するスレッド一覧を取得
//件名を検件にする subject:件名 と label がxdemyのメールのスレッドを取得
//未読を条件に加えたい場合は 「is:unread」を追加 よく使う
var threads = GmailApp.search('subject:xxx.xdemy.comでの学びに招待されています。 label:xdemy',0,10);
// スレッドを一つずつ取り出す
threads.forEach(function(thread) {
// スレッド内のメール一覧を取得
var messages = thread.getMessages();
//messageを一つずつ取り出す
messages.forEach(function(message) {
// メール本文を取得
var plainBody = message.getPlainBody();
console.log(plainBody);
//メール本文から取得したい値をsplitで抽出し変数 udlik に代入
//「ライセンスを申請:」 の後ろから改行前「'\r\n'」までが取得したいURLになる
const udlik = plainBody.split('ライセンスを申請: ')[1].split('\r\n')[0];
// メッセージの送信元を取得する場合
//var name = message.getFrom();
// メッセージの宛先を取り出す
var email = message.getTo();
//メッセージを既読にする場合
//GmailApp.markThreadsRead(message);
// message.markRead();
// 書き込むスプレッドシートのシート名を指定し情報を取得
var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
// 最終行を取得
var lastRow = sheet.getLastRow() + 1;
// セル情報を取得して値をスプレッドシートに追記
//今回は email と udlik
// sheet.getRange(lastRow, 3).setValue(plainBody);
//sheet.getRange(lastRow, 2).setValue(name);
sheet.getRange(lastRow, 1).setValue(email);
sheet.getRange(lastRow, 2).setValue(udlik);
});
});
}
GASの説明
-
Gmailで検索条件に一致したスレッドを変数 threads に代入する
var threads = GmailApp.search('subject:xxx.udemy.comでの学びに招待されています。 label:Udemy',0,10);
-
GmailApp.search(検索条件,開始位置,最大取得数)で検索する
-
検索内容を ' ' シングルコーテーションで囲む
- subject:件名 ※件名を指定する
- label:ラベル名 ※ラベル名を指定する
- is:unread ※未読を指定する
-
複数の検索条件は半角スペースでつなげる
-
開始位置 開始するスレッドのインデックス 基本0
-
最大取得数 最大いくつのスレッドを取得するか指定する 例では10
-
-
forEachでthreadsからスレッドを一つずつ取り出す
threads.forEach(function(thread) {
-
スレッド内のメッセージを取得し変数messages に代入する
var messages = thread.getMessages();
-
forEachでmessagesからメッセージを一つずつ取り出す
messages.forEach(function(message) {
-
messageから本文を取得し変数plainBodyに代入する
var plainBody = message.getPlainBody();
-
メール本文から取得したい値を取得し変数udlikに代入する
const udlik = plainBody.split('ライセンスを申請: ')[1] .split('\r\n')[0];
-
plainBody.split('ライセンスを申請: ')[1].
-
ほしい値は本文の「ライセンスを申請:」 の後ろから改行前「'\r\n'」までを取得したい
plainBody.split('ライセンスを申請: ')[1]
- splitで[ライセンスを申請:]の後の文字列を取得し
.split('\r\n')[0];
- splitで改行前をの値を取得
-
値を変数udlik に代入する
-
-
メッセージの宛先を取り出し変数emailに代入する
var email = message.getTo();
- 書き込むスプレッドシート情報を取得し変数sheetに代入する
var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
- シート名を指定する 今回作成したのは「シート1」というシート名
SpreadsheetApp.getActive()
- アクティブになっているスプレッドシートを選択し
.getSheetByName('udemy')
- シート名がudemyのシート情報を取得する
- 最終行を取得し次の行に値を追加したいため1足し変数lastRowに代入する
var lastRow = sheet.getLastRow() + 1;
- シートのA列最終行の下に変数 email を追記する
sheet.getRange(lastRow, 1).setValue(email);
- シートのB列最終行の下に変数 udlik を追記する
sheet.getRange(lastRow, 2).setValue(udlik);