Gmail→PDFを自動化するGAS。2022年電子保存法改正対応。

  • URLをコピーしました!

GmailのメールをPDF化。
これを自動化するプログラムを書いてみました。

※GmailとPDF by FUJIFILM X-Pro3+10-24mmF4

GmailをPDF化する必要性

GmailをPDFにする……はたしてその必要があるのでしょうか。
Gmailであれば、検索することもできますし、自分が消さない限りずっと残っています。
必要なときに検索すればいいわけです。

Google側もそう思ってか、メールのプリントアウト=PDF化にはショートカットキーもありません。
あえてやるなら、
Tabキーを4回→Enter→下を4回→Enter→Enter→Enter
です。
長すぎますし美しくありません。

メールをPDF化なんてやりたくなりものです。
ただ、この件でその必要性が出てきました。
(Gmail保存でいいじゃんと思うのですが)

2022年1月電子帳簿保存法改正。やってはいけないこと・すぐやるべきこと・税務調査までにやるべきこと

メールをPDF保存しておく必要があるわけです。
とはいえ、1つずつ保存していたら大変。
なんとかしたいものです。

案として、Gmail→PDFを自動化する流れをGAS(Googleのプログラミング言語)でつくってみました。

Gmail→PDFの流れ

Gmailを自動化するプログラムGASにも、「GmailをPDF化」するという方法がありません。
やはりおすすめされていないわけです。

そこで、今回は
・GmailをGoogleドキュメントにする
・GoogleドキュメントをPDFにする
という方法をとりました。

こういったPDFができます。

これがGmailからつくったPDF。
だいたい似せています。

 

スタバのモバイルオーダー&ペイは、レシートがなく、メールまたはアプリで明細を受け取るだけです。
アプリだと保存期間が短く(10個程度)、メールをとっておくのがいいでしょう。
その場合、PDFで保管しておきたいものです。
なお、
・モバイルオーダー&ペイで、レシートを別途もらう
・このことのためだけにモバイルオーダー&ペイを使わない
というのは想定していません。

また、Gmail上は、ラベル「電子」をつけ(自動または手動で)、そのラベルがついたものをPDF化するしくみにしています。
運用としては、月に1回程度、PDF化したら、ラベルを外すといいでしょう。
プログラムで対応もできますが、複雑なるので。

GASについては、この記事や動画を参考にしていただければ。

GAS(Google Apps Script)をコピペして使う方法

 

こういったプログラムです。
テンプレートのドキュメントをつくり、[ツール]→[スクリプトエディタ]を開き、貼り付けていただければ。
テンプレートは後述します。

function gmail_pdf() {

//1 設定
  //保存するフォルダ
  const folderID='1I1OSB3DRjlJD70yR08FLVi_wnAAT6aMH'

  //Gmailの抽出条件
  const conditions = "label:電子"


  //抽出数
  const mail_count = 6

//2 メールPDFテンプレートを読み込む
  //このドキュメント読み込み
  const templete =DocumentApp.getActiveDocument();

  //ドキュメントのIDを読み込み
  const templeteID=templete.getId(); 

//3 Gmailから抽出 

  let search_mail = GmailApp.search(conditions,0,mail_count);
  let mail_message = GmailApp.getMessagesForThreads(search_mail);
 

//4 抽出したメールからデータ取得

  for(let i= 0;i<mail_message.length;i++){

    for(let j= 0;j<mail_message[i].length;j++){
      //日付
      let date = mail_message[i][j].getDate();

      //件名
      let subject = mail_message[i][j].getSubject();

      //送信元
      let senderaddress = mail_message[i][j].getFrom();
 
      //受取人
      let myaddress = mail_message[i][j].getTo();
 
      //メール本文
      let body = mail_message[i][j].getPlainBody();
 
      //テンプレートをコピー
      let copy_doc =DriveApp.getFileById(templeteID).makeCopy(folderID);

      //コピーしたドキュメントのID取得
      let copy_docID= copy_doc.getId();  

      //コピーしたドキュメントを開く
      let doc = DocumentApp.openById(copy_docID);
      
      //コピーしたドキュメントからテキストを読み込む
     let doc_text =doc.getBody();

      //テキストをGmailから取得したデータで置換
      doc_text.replaceText('件名',subject).replaceText('送信元',senderaddress).replaceText('受取人',myaddress).replaceText('本文',body).replaceText('日付',date);

      //保存      
      doc.saveAndClose();

      //PDFに変換
      let pdf = doc.getAs('application/pdf');
      
      //保存フォルダをGoogleドライブ上で読み込み
      const  folder = DriveApp.getFolderById(folderID);
      
      //保存PDF名を設定
      let filename = senderaddress+date;
      
      //PDFファイルを保存
      folder.createFile(pdf).setName(filename);

      //コピーしたファイルを削除
      const file = DriveApp.getFileById(copy_docID);
      file.setTrashed(true);
  
    };
  };
};

では、解説していきます。

Gmail→PDFを自動化するGAS

大まかな流れは、
1 必要な設定をする
2 PDFにするテンプレート(ドキュメント)をコピーする
3 対象のメールをGmailから抽出
4 以降を指定の回数だけ繰り返す
・メールから日付、件名、送信元、受取人、本文を抽出
・ドキュメントに上記のものを入れる
・ドキュメントをPDFにして名前をつけて保管
・ドキュメントは、削除
といったものです。

まず、PDFのテンプレートをドキュメントでそれっぽく準備します。
このURLの一部がドキュメントのIDです。
プログラムの中で使います。

まず、設定。
保存するフォルダを指定し、抽出の条件(ここでは、「電子というラベル」)、抽出数(ここでは6)と決めまましょう。
抽出数は多めにしておけば、メールの数だけ繰り返します。

 

フォルダをGoogleドライブ内につくり、URLの一部からIDをコピーしておきましょう。
これらをダウンロードしてもいいですし、そのまま置いておいてもかまいません。
私は置いておきます。

次にメールPDFのテンプレート、IDを読み込みます。

Gmailから対象のメールを抽出します。

Gmailから抽出したメール1つずつから、日付、件名等を取り出し、

テンプレートをコピーし、そのコピー後のドキュメントに該当部分に、データを入れていきます。

テンプレートはこうなっており、それぞれ、「件名」「送信元」などを、replacetTextで、置換していくのです。
こうしたほうがテンプレートを活用しやすくなります。

そのドキュメントをPDFに変換し、フォルダを設定して、保存します。

最後に、データを入れたドキュメントは、不要なので、削除するようにしました。

 

こんな感じで「らしく」なればいいかと。

  ヨドバシ・ドットコムは、サイトで領収書をダウンロードできますが、手間もかかり、日付がダウンロード日になるのがちょっとやっかいです。
この方法でやっています。

GASの研究も含めて、試してみていただければ。

 



■編集後記
昨日は朝、公園へ行き、午後からセミナーに参加しました。
夜は、オンラインブランディング講座の入門セミナーを開催。
19:40までだったので、娘に風呂は待ってもらいました。

1日1新Kindle『1日1新』Instagram『1日1新』
浅草 ドトール

■娘(4歳8ヶ月)日記→Kindle『娘日記』
朝は公園へ。
砂で遊んでいました。エンドレスで。
城をつくったり、走り回ったり。
夜はマクロスフロンティアを。

  • URLをコピーしました!