その他

GASでメールを転送後にラベルを付けてスプレッドシートに転記する[No99]

スポンサーリンク

GASでメールを転送したら、転送したメールが分かるように転送済'ラベルを付与し、転送したメールをスプレッドシートに転記するプログラムを作成しました。

使い方

GAS(Google Apps Script)にはスタンドアロンスクリプトとコンテナバインドスクリプトの2種類のスクリプトがあります。このプログラムはどちらにも対応しやすいように記載しています。

スプレッドシートで利用する場合は、あらかじめスプレッドシートの用意が必要です。また、シートには「一覧」シートを用意しておく必要があります。

「▼#####▼」と「▲#####▲」で囲まれた箇所はスプレッドシートに転記する処理を記載しています。もしもスプレッドシートに転記しなくても良い場合は、コメントアウトしてください。

ソースコード


function Main() {
  ForwardMail(検索Fromのメールアドレス, 検索Toのメールアドレス, '検索の件名01', 300, 送信先のメールアドレス);
  // ForwardMail(検索Fromのメールアドレス,検索Toのメールアドレス, '検索の件名01',300, 送信先のメールアドレス);
}

const ForwardMail = (srchFrom, srchTo, srchSubject, srchTime, emailTo) => {
  try {
    // 受信日時指定
    const date = new Date(); // 現在時刻を取得
    const unixTime = date.getTime(); // UNIX TIMEに変換
    const now = Math.floor(unixTime / 1000); // ミリ秒を秒に変換
    const term = (now - srchTime).toString(); // 60の場合、現在時刻から1分(60秒)前
    const srchTerm = term.toString(); // 文字列に変換

    const label = GmailApp.getUserLabelByName('転送済') || GmailApp.createLabel('転送済');

    let srchCondition = '';
    srchCondition = srchCondition + 'from:' + srchFrom;
    srchCondition = srchCondition + '\u0020';
    srchCondition = srchCondition + 'to:' + srchTo;
    srchCondition = srchCondition + '\u0020';
    srchCondition = srchCondition + 'subject:' + srchSubject;
    srchCondition = srchCondition + '\u0020';
    srchCondition = srchCondition + 'after:' + srchTerm;
    srchCondition = srchCondition + '\u0020';
    srchCondition = srchCondition + '-label:' + "転送済";

    const myThreads = GmailApp.search(srchCondition, 0, 10); // 条件にマッチしたスレッドを取得
    const myMessages = GmailApp.getMessagesForThreads(myThreads); // スレッドからメールを取得する

    if (typeof myMessages === "undefined" || myMessages.length === 0) {
      console.log("対象なし");
    } else {
      const recipient = emailTo;
      const options = {};

      myMessages.map(function (myMsgs) {
        const myMsg = myMsgs[0];
        console.log("対象あり:メール送信開始" + " " + "Rfc822msgid:" + myMsg.getId() + " " + "subject:" + myMsg.getSubject());
        MailApp.sendEmail(recipient, myMsg.getSubject(), myMsg.getPlainBody(), options);
        // myMsg.forward(recipient);
        myMsg.getThread().addLabel(label);
        console.log("対象あり:メール送信完了" + " " + "Rfc822msgid:" + myMsg.getId() + " " + "subject:" + myMsg.getSubject());

        //▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼#####▼
        console.log("対象あり:スプレッドシート書込み開始" + " " + "Rfc822msgid:" + myMsg.getId() + " " + "subject:" + myMsg.getSubject());
        // 書き込むシートを取得
        const sheet = SpreadsheetApp.getActive().getSheetByName('一覧');
        // const sheet_id = 'xxxxx';
        // const sheet_name = '一覧';
        // const sheet = SpreadsheetApp.openById(sheet_id).getSheetByName(sheet_name);
        // const addArray = ['1', '2', '3'];
        // sheet.appendRow(addArray);

        let array = [];
        array.push(['Date', Utilities.formatDate(myMsg.getDate(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss')]);
        array.push(['Subject', myMsg.getSubject()]);
        array.push(['From', myMsg.getFrom()]);
        array.push(['To', myMsg.getTo()]);
        array.push(['Cc', myMsg.getCc()]);
        array.push(['Bcc', myMsg.getBcc()]);
        array.push(['ReplyTo', myMsg.getReplyTo()]);
        array.push(['Body', myMsg.getBody()]);
        array.push(['PlainBody', myMsg.getPlainBody()]);
        array.push(['Id', myMsg.getId()]);
        array.push(['Header("Message-ID")', myMsg.getHeader("Message-ID")]);
        // array.push(['RawContent', myMsg.getRawContent()]);

        let nameRow = 1;// ヘッダー行を設定
        for (let i = 0; i < array.length; i++) { sheet.getRange(nameRow, i + 1).setValue(array[i][0]); }

        let lastRow = sheet.getLastRow() + 1;// 最終行を取得
        for (let i = 0; i < array.length; i++) { sheet.getRange(lastRow, i + 1).setValue(array[i][1]); }

        console.log("対象あり:スプレッドシート書込み完了" + " " + "Rfc822msgid:" + myMsg.getId() + " " + "subject:" + myMsg.getSubject());
        //▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲#####▲
      });
    }
  } catch (err) {
    Logger.log(err);
  }
}

参考サイト/関連サイト

Class GmailMessage  -  Apps Script  -  Google Developers

最後までお付き合いいただきありがとうございます!

この情報が誰かの役にたてれば幸いです。

スポンサーリンク

-その他