定型のメールの送信をGAS(GoogleAppsScript)で自動化した様子
みなさん、こんにちは。
紙、印鑑、手作業に埋もれて業務をしている昭和男子の会社員です。
毎月、請求書を大量に発行し、メール送信している業務を行っています。
前回、Power Automate Desktop で請求書のExcelファイルをメールに添付し間違えないように取引先ごとにExcelファイルを仕分けしたり、フォルダを圧縮したりして、自動メール送信まで、あと一歩まできました。
しかし、Power Automate Desktopで複数ファイルの添付の方法がわからず、また、フォルダを圧縮し添付すると文字化けしたり、まだまだ課題がありました。
そんな時、同僚からこんな一言が・・・
「Gmailを使っているんだから、GASの方が相性がいいかも」
ということで、GASで自動メール送信に取り組みました。
使用するもの
・ChatGPT
・Google Apps Script
・Google Spread Sheet
・Google Drive
・Gmail
ChatGPTにGASのコードを聞く
GASのコードなんて書けないので、ChatGPTにとにかく聞いてみました。
Google Apps Scriptを使って、メール送信前の下書きメールを自動作成したい。コードを教えて!
Google Spreadsheetsにrecipient、subject、bodyの各変数に対応する項目をつくりました。紐づけるコードを教えてください。
スプレッドシートの空白行まで繰り返し下書きメールを作成するにはどうしたらよいですか?
ファイルを添付したいのですが、どうしたらよいですか?
下記のコードにさらにファイルを添付したい。
どのように修正すればよいでしょうか?
(コードを貼り付ける)
データの4列目に添付ファイルを指定したい。
どうしたらよいですか?
指定したフォルダにあるファイルを複数すべて添付したい。
どうすればよいですか?
フォルダIDは、データの4列目に明記し、変数とします。
コードを修正してください
こんな感じで聞きまくり、出来たコードがこちらです。
GASのスクリプト
function createDraftEmail() {
var spreadsheetId = "スプレッドシートのID"; // スプレッドシートのIDを指定してください
var sheetName = "sheet1"; // データがあるシートの名前を指定してください
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
var dataRange = sheet.getDataRange(); // データがある範囲を指定してください
var data = dataRange.getValues();
for (var i = 1; i < data.length; i++) {
var recipient = data[i][0];
var subject = data[i][1];
var body = data[i][2];
var folderId = data[i][3]; // 4列目に添付したいファイルが格納されているフォルダのIDがあると仮定しています
var folder = DriveApp.getFolderById(folderId);
var files = folder.getFiles();
var attachments = [];
while (files.hasNext()) {
var file = files.next();
attachments.push(file.getBlob());
}
var draftEmail = GmailApp.createDraft(recipient, subject, body, {
attachments: attachments // フォルダ内のすべてのファイルを添付します
});
Logger.log("下書きメールが作成されました。ドラフトメールのID: " + draftEmail.getId());
}
}
複数のファイルを添付することが可能に
メールの自動送信をしたくて、添付ファイルをフォルダ毎にまとめることにし、フォルダを圧縮したのですが、「文字化け」の課題が解決できず、複数ファイルを添付することに再度GASで挑戦し、見事、成功しました。
ほんと、ChatGPTはすごいですね。
でも、こちらでも課題があり、通常使用しているエクスプローラーのフォルダのファイルは、添付できない仕様になっているとの事。
GASで自動メール送信をするには、エクスプローラーのフォルダから、Google Driveのフォルダへのアップロードの手間が必要になりました。
ひとつ課題をクリアすれば、またひとつ課題が・・・
なかなか思い通りには、ならないですね~
でも、また一歩自動化に近づいた気はします。