1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【GAS】Gmailで条件一致した値をスプレッドシートに書き出す

Last updated at Posted at 2022-07-16

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);
    

  

スプレットシートにGmailから抽出した内容が書き出される

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?