DriveGmail

【GAS】添付ファイルを取得・保存 メール添付の請求書PDFを保存してチャットに通知⑤ 

前回のおさらい

前回はメールの本文から正規表現とmatchメソッドを使って税抜請求額と税込請求額を取り出しました。

税抜請求額と税込請求額は両方とも文字列として変数に格納したのでいつでも利用可能です。


税抜請求額と税込請求額が書かれた行を検索する正規表現を書きました。

  • /税抜請求額.*$/m
  • /税込請求額.*$/m


正規表現を利用してmatch関数で税抜請求額と税込請求額が書かれた行を取得しました。

const taxNotIncluded = messageBody.match(/税抜請求額.*$/m)
const taxIncluded = messageBody.match(/税込請求額.*$/m)


メール本文中に書かれた文字列の取得はできましたので、今回は添付ファイルを取得してGoogleドライブに保存します。

添付ファイルを取得する

請求書メールには請求書ファイルが添付されています。


1個の請求書ファイルが添付されていますね。

添付ファイルを取得するにはメッセージオブジェクトのgetAttachmentsメソッドを使います。

const searchGmail = () => {
  const gmail = GmailApp
  const searchedMail = gmail.search('from:株式会社 インボイス送信元 subject: 【請求書】送付のご案内 is:unread')
  const messages = searchedMail.map(thread => {
    return thread.getMessages()
  })
  const message = messages[0][0]

  // 本文から税抜請求額と税込請求額を取得
  const messageBody = message.getPlainBody()
  const taxNotIncluded = messageBody.match(/税抜請求額.*$/m)[0]
  const taxIncluded = messageBody.match(/税込請求額.*$/m)[0]

  // 添付ファイルの取得
  const attachments = message.getAttachments()
  console.log(attachment)
}

getAttachmentsメソッド ー メッセージオブジェクトから添付ファイルを取得するメソッド

構文:メッセージオブジェクト.getAttachments()

戻り値:添付ファイルオブジェクトの配列

参照)Google Apps Scriptのマニュアル


実行結果


請求書メールに添付されているのは1つの請求書ファイルです。配列の中に一つしかオブジェクトがありませんので、どうやらこれが請求書ファイルっぽいですね。

では、本当に請求書ファイルなのかファイル名を確かめてみましょう。お目当てのオブジェクトは配列の1番目です。

const searchGmail = () => {
  const gmail = GmailApp
  const searchedMail = gmail.search('from:株式会社 インボイス送信元 subject: 【請求書】送付のご案内 is:unread')
  const messages = searchedMail.map(thread => {
    return thread.getMessages()
  })
  const message = messages[0][0]

  // 本文から税抜請求額と税込請求額を取得
  const messageBody = message.getPlainBody()
  const taxNotIncluded = messageBody.match(/税抜請求額.*$/m)[0]
  const taxIncluded = messageBody.match(/税込請求額.*$/m)[0]

  // 添付ファイルの取得
  const attachments = message.getAttachments()
  console.log(attachments[0].getName()) // 配列の1番目のオブジェクトのgetNameメソッドでファイル名を取得
}

getNameメソッド ー 添付ファイルオブジェクトからファイル名を取得するメソッド

構文:メッセージオブジェクト.getName()

戻り値:文字列

参照)Google Apps Scriptのマニュアル 添付ファイルクラス


実行結果


おー、なんかうまくいってるっぽいですね!

Googleドライブに保存する

さて、お次はGoogleドライブに保存します。Google Apps Scriptに色々書くまえにGoogleドライブの画面で保存先をつくっておくと整理されていいですね。

Googleドライブにフォルダを作成する

Googleドライブのマイドライブで右クリック > 新しいフォルダ


フォルダ名を「請求書」にする


「請求書」フォルダの中身

まだ何もありません。つくったフォルダに請求書ファイルを保存していきます。

Googleドライブに保存する

Googleドライブを操作するにはDriveAppクラスを利用してdriveオブジェクトを作ります。

このへんはGmailを利用するときと同じですね。

const drive = DriveApp

DriveAppクラス

構文:変数 = DriveApp

戻り値:オブジェクト

参照)Google Apps Scriptのマニュアル DriveAppクラス


次に保存先のフォルダを指定します。フォルダを指定するにはフォルダIDが必要です。

フォルダをひらいたときのURLからフォルダIDをゲットできます。

「https://drive.google.com/drive/folders/フォルダID/」


で、フォルダオブジェクトを取得します。

const folder = drive.getFolderById('フォルダIDが入ります')

getFolderByIdメソッド ー フォルダIDからフォルダオブジェクトを取得するメソッド

構文:Googleドライブオブジェクト.getFolderById(‘フォルダID’)

戻り値:フォルダオブジェクト

参照)Google Apps Scriptのマニュアル DriveAppクラス


フォルダオブジェクトはフォルダ内にファイルをつくるためのcreateFileメソッドを持っています。

こいつを利用して請求書ファイルを請求書フォルダに保存しましょう。

const invoiceFile = folder.createFile(attachments[0])

createFileメソッド ー blobからファイルを作成するメソッド

構文:フォルダオブジェクト.createFile(blob)

戻り値:ファイルオブジェクト

参照)Google Apps Scriptのマニュアル フォルダクラス


クレーマー
クレーマー

blobなんてはじめて聞いたぜ!

blogの間違いじゃねぇのか!訴えてやる!

まぁまぁ、落ち着いてください。blobというのはPDFやテキストファイル、画像のようなファイルをオブジェクトとしてあつかえるようにしたものです。Google Apps Scriptではblobを操作するための専用のメソッドが用意されています。

参照)Google Apps Scriptのマニュアル blobクラス


さて、今はコードの全体がこのようになってまして、

const searchGmail = () => {
  const gmail = GmailApp
  const searchedMail = gmail.search('from:株式会社 インボイス送信元 subject: 【請求書】送付のご案内 is:unread')
  const messages = searchedMail.map(thread => {
    return thread.getMessages()
  })
  const message = messages[0][0]

  // 本文から税抜請求額と税込請求額を取得
  const messageBody = message.getPlainBody()
  const taxNotIncluded = messageBody.match(/税抜請求額.*$/m)[0]
  const taxIncluded = messageBody.match(/税込請求額.*$/m)[0]

  // 添付ファイルの取得とドライブへの保存
  const attachments = message.getAttachments()
  const drive = DriveApp
  const folder = drive.getFolderById('フォルダIDが入ります')
  const invoiceFile = folder.createFile(attachments[0])
  console.log(invoiceFile)
}


実行結果はというと、、、


このように無事にファイルオブジェクトをつくれました。

肝心のGoogleドライブにも請求書ファイルが保存されていますね。


なかなかいい感じです。

次回はチャットツールに通知するメッセージをつくります。

だいたいのチャットツールはメッセージを整形していい感じに作れるのですが、ツールによって整形ルールが違います。

効率化のために整形ルールの違いをものともしないプレーンな味わいのメッセージをつくろうと思います。それならどのチャットツールでも使えますからね。

敵は我なり届け雷

Copied title and URL