先日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に変換、添付ファイルとしてメール送信しているだけです。
添付ファイル扱いになってしまいますし、送信先によっては受け取りが難しいかもしれませんが、“とりあえず内容を確認してもらいたい!”といった用途では使えますので、文字化けにお困りの方は試してみてはいかがでしょうか。
















この記事へのコメントはありません。