先日Twitterで @TsujiKenzo さんが下記のようにツイートされていました。送信先のシステムがShift-JISでメールを受け取る仕様で、GASからのメール送信でお困りのようです。
gasでgmailを送信する時の文字コードって指定できるんだろうか(デフォルトはUTF-8)。。。
最近、文字コード沼が流行ってますね。#GAS
— TSUJI KENZO (@TsujiKenzo) July 29, 2021
下記のようにAdvanced Gmail Serviceを使用することで、MailAppクラスよりも細かな制御ができるのですが、私自身ヘッダーの指定やら文字化けやらで苦しんだ記憶があります。
//Advanced Gmail Service使用 function myFunction() { let contents = "To: (送信先メールアドレス)\n"; contents += "Subject: =?iso-2022-jp?B?GyRCJUYlOSVIJWEhPCVrGyhC?=\n"; //テストメール contents += "Content-Type: text/plain; charset=iso-2022-jp\n"; contents += "Content-Transfer-Encoding: 7bit\n\n"; contents += '$B$"$$$&$($*(B'; //あいうえお const msg = Gmail.newMessage(); msg.raw = Utilities.base64EncodeWebSafe(contents); Gmail.Users.Messages.send(msg, "me"); }
そこで今回は、代替案として文字化けする日本語の本文をPDFに変換し、メールに添付して送信するスクリプトをご紹介します。
function sendPDF() { const fileName = "SampleDocument"; let body = "お世話になっております。\n"; body += "弊社製品〇〇へのお問い合わせありがとうございました。\n\n"; body += "3営業日以内に担当者よりご連絡いたしますので、今しばらくお待ちくださいませ。"; //Docs文書を作成してPDF変換 const doc = DocumentApp.create(fileName); doc.getBody().setText(body); doc.saveAndClose(); const pdf = DriveApp.createFile(doc.getAs("application/pdf")).setName(fileName + ".pdf"); //PDFを添付してメール送信 MailApp.sendEmail( "(送信先メールアドレス)", //To "TEST MAIL", //Subject "Please refer to the attachment.", //Body { attachments: pdf } ); //不要になったファイルを削除 DriveApp.getFileById(doc.getId()).setTrashed(true); DriveApp.getFileById(pdf.getId()).setTrashed(true); }
仕組みはシンプルで、本文をGoogleドキュメント文書として一時的に作成してPDFに変換、添付ファイルとしてメール送信しているだけです。
添付ファイル扱いになってしまいますし、送信先によっては受け取りが難しいかもしれませんが、“とりあえず内容を確認してもらいたい!”といった用途では使えますので、文字化けにお困りの方は試してみてはいかがでしょうか。
この記事へのコメントはありません。