【コピペで使える】GASでファイルをzipにしてメール添付してみる

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

日々の業務の中で添付メールを送る機会は結構な頻度であります。

その中にはGoogleドライブ保存してある複数ファイルをzipに圧縮し、Gmailに添付して送信を行う

といった作業を行なっている方もいるかと思います。

毎日の業務で同じファイルを送る作業はたとえ短くても、積み重なると結構な時間が使われてしまいます。

そこで今回は、

ファイルをzipに圧縮する方法

メールに添付し送信する方法

をスクリプトで実行する方法をご紹介します。

この方法で自動送信が可能になり作業効率化が可能になりますのでぜひ覚えていってください。


スポンサーリンク

ファイルをzipに圧縮する:Utilities.zip(blobs,name)

blob形式にしたファイルをzip形式に圧縮するメソッドです。

blobs部分:blob形式のファイル

name部分:zipファイルの名称

を記載することでzipファイルが作成できます。

クラス:Utilities

注意:初めてコードを実行する際にアクセス権限の許可を求められますが許可をしてください。アクセス権限についての詳細は以下の記事に詳しく載っています。

無料のGmailアカウントでGASに初回の実行許可を与える方法

では実際にサンプルスクリプトを使ってzipファイルを作成していきましょう。

function createZipfile(){
  //fileAidから取得 ※このままでは作成できないので、各自ファイルのidを用意してください
  var fileA = DriveApp.getFileById("1iqGtkvOSlzsiUv4F6blOnR0REX1uuEPvhY-C9ClSMjs"); 
  var fileB = DriveApp.getFileById("1HYsuwEsUiyUQJfNd200SuW0mCpVE4feAWNp4S0ay01U"); 
  //fileA fileBのBlobを取得し変数に格納
  var fileABlob = fileA.getBlob();
  var fileBBlob = fileB.getBlob();
  //zipファイルを作成
  var zipFile = Utilities.zip([fileABlob, fileBBlob],"createZipFile.zip");
  //folder場所指定
  var folder = DriveApp.getFolderById('1YTWmbQxCnnuLtgD8VhCTcV6xDAbsEPiT'); //フォルダIDを指定
  //作成したzipファイルを指定したfolderに
  folder.createFile(zipFile);
}

※太字のIDはこのままでは使用できませんので、各自ファイルid フォルダidを入力してください。

今回の流れとしては

3〜4行目

fileA fileBをidから取得

6〜7行目

fileA fileBのBlobを取得し変数に格納(変数名 fileABlob fileBBlob)

9行目

zipファイルを生成

11〜14行目

指定したフォルダに作成したzipファイルを作成

という流れになっています。

getFileByIdについては以下の記事も参考にしてみてください。

Google Apps Scriptでドライブのフォルダやファイルを取得してみる

GoogleリファレンスではURLを使用したUrlFetchAppというものを使用しています。

先ほどのスクリプトを実行すると以下のように指定のフォルダにfileA fileBが入ったzipファイルが作成されます。

メール添付方法:sendEmail(recipient,subject,body,options)

gmailをスクリプトで送信するために必要なメソッドです。()内に情報を追加することで

自動的にメールを送ることができます

※カッコ内情報

recipient:宛先

subject: 件名(最大250文字)

body: 本文

options: 様々な機能(今回は添付ファイルを使用します)

クラス:GmailApp

では次に先ほど作成したzipファイルをメールに添付する方法をご説明します。

Gmailに関するコードの一覧はこちらで説明していますので一覧で知りたい方はご確認ください。

今日からGmailで使えるGASのコード一覧

ではスクリプトコードを確認してみましょう。

function sendEmailAttachments(){
  //先ほど作成したzipファイル
  var zipFile = DriveApp.getFileById('17_JslmWp9kzYIhQzqtExj8d2kqzesGUW');
  //zipファイルのBlob形式を取得
  var zipBlob = zipFile.getBlob();
  //メール送信
  GmailApp.sendEmail('testtest@test.com', 'ここに件名を入れてください', 'ここに本文を入れてください', {
    attachments: [zipBlob],
    name: 'ここに宛先に表示される名前を入れてください'
  });
}

※太字のIDはこのままでは使用できませんので、各自ファイルid を入力してください

今回の添付ファイルメールの送信の流れとしては

3行目〜5行目

先ほど作成したzipファイルをidから取得しblob情報を取得

7行明〜9行目

Gmail送信メソッドであるGmailApp.sendEmailで送信

という流れになっています。

では次にsendEmailメソッドの中身を解説していきます。

構造としては

(宛名,件名,本文,オプション)となっておりますので

(‘testtest@test.com’,

‘ここに件名を入れてください’,

‘ここに本文を入れてください’,

{ attachments: [zipBlob], name: ‘ここに宛先に表示される名前を入れてください’ }

);

こう言った形になっております。

宛名、件名、本文までは特に注意は必要ありませんが

オプション部分が今回添付する際には必要になっています。

今回はこのブログの目的である

添付:attachments

そして必須ではありませんが以下の宛先名称も入れています

宛先に表示させる名称 : name

ちなみにオプション部分は{        }で囲っていきます。

添付部分の構造は以下のようになっています。

attachments: [zipBlob] :添付ファイル(複数ある場合は配列にしていく)

name: ‘ここに宛先に表示される名前を入れてください’ :宛先名

この他にも

bcc cc from htmlBody inlineImages noReply replyTo

などがこのオプションで選択することができます。

先ほどのスクリプトを実行すると設定通りのメールが届いていることがわかります。

メールの中身も設定通り添付ファイルも入っています。

まとめ

今回はファイルをzip形式にするUtilities.zipメソッドを使用して複数ファイルをzipにし、

sendEmailメソッドを使用してzipファイルを添付してメールを送信するスクリプトを作成しました。

今回の作業では基本的な方法をお伝えしましたがこの作業を応用すると

特定ファイルをzip形式にしトリガーを使用して指定の時間に送信する

特定フォルダ内の指定したファイルをzip形式にしてトリガーを使用して毎朝送信する

などと言った複雑な作業もできるようになりますのでぜひ活用してみてください。

ここまでご覧いただきありがとうございました。

 
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

商標および、登録商標について

Googleおよび、Googleロゴおよび、Googleドライブおよび、Googleドキュメントおよび、Googleフォトおよび、Googleスプレッドシートおよび、Googleサイトおよび、GoogleスライドおよびGmailおよび、Googleマップおよび、Googleタスクおよび、Google WorkspaceはGoogle LLCの登録商標です。

本サイトのコンテンツはいかなる場合においても、Googleから公式に提携及び承認されているわけではありません。

 

 

コメント

    コメントを残す

    *