質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

2回答

736閲覧

【GAS,Gmail】一部環境依存文字が文字化けする

nana_mag

総合スコア4

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2024/05/23 02:33

編集2024/05/24 00:09

実現したいこと,前提

GASからメール送信をしていて、環境依存文字(𠮷)が文字化けする(髙などは文字化けしていない)。
人名なので代替文字で送付することはなるべく避けたい。

発生している問題

メール本文(下記ソースコードのmail_body)内の該当文字が送信済メールを確認すると文字化けしている。

※具体例:
例えば「髙橋さん」は送信済メールでも「髙橋さん」となっているが、「𠮷田さん」は「������田さん」になってしまう

該当のソースコード

javascript

1function send_mail() { 2 let opt = { 3 from_name: '送付元', 4 from_address: '送付元アドレス', 5 title: '件名', 6 to_address: '送信先アドレス', 7 mail_body: '本文' 8 }; 9 10 Logger.log(opt); // この段階では文字化けしていない 11 // (具体例通りだとmail_body: 𠮷田さん となっている) 12 13 // options内でhtmlBodyに本文を入れてHTMLメールとして送信しても文字化けする 14 let options = {from: opt.from_address, 15 name: opt.from_name, 16 encoding: "UTF-8"}; // encodingは入れても入れなくても変わらなかった 17 18 GmailApp.sendEmail(opt.to_address, opt.title, opt.mail_body, options); 19// 20}

補足情報

Webブラウザから直接メール送信した場合は文字化けしないため、ブラウザは問題なさそうです。
GmailAppから送るとテキスト形式でもHTML形式でも文字化けします。

以下、送信済メールのソースを抜粋して添付します。

テキストメール

Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64

HTMLメール

Content-Type: multipart/alternative; Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

※追記:エイリアスから送信しているためGmailApp.sendEmail()を使用しております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

juner

2024/05/23 05:34

文字はどの様に化けますでしょうか?
nana_mag

2024/05/23 05:49

������となります。
ikedas

2024/05/23 14:38

問題の文字はどこに入っているのでしょうか。from_name、title、mail_bodyのいずれでしょうか。また「文字化け」しているのはそのうちどこで、「文字化け」していないのはどこでしょうか。
nana_mag

2024/05/23 22:32

文字化けしているのもしていないのも、いずれもmail_body内の文字です。
ikedas

2024/05/23 23:20

コメントで「ここでは文字化けしていない」と言っているる出力の内容の具体例を示してください (このコメント欄に書くのではなく、質問文を編集して書いてください)。
nana_mag

2024/05/23 23:53

ありがとうございます、質問文編集いたしました。ご指摘の意図が掴めていなかったら申し訳ありませんが、こちらで宜しいでしょうか?
juner

2024/05/24 01:31 編集

できるなら メールソース上の文字化け箇所(※ base64エンコーディングされている中の文字化け位置の箇所)の情報がほしい感じがしますね。(文字化けの文字化けがどこで発生しているかを確認したい場合
guest

回答2

0

ベストアンサー

𠮷」はユニコードの追加面に登録されている文字です (絵文字なども多くが追加面に登録されています)。javascriptでは追加面の文字は代用対で表されますが、GmailApp.sendEmail はこれに対応していないようです。MailApp.sendEmailは対応しています。

ですので解決策のひとつは「MailApp.sendEmailを使う」です。

他の解決策としては、Gmail APIを使うことです。メッセージのエンコードを全て自分でやらなければなりませんが、どんな文字が入ったメッセージでも送れます。

なお、GmailApp.sendEmail でも件名 (サブジェクト) については、自分でヘッダエンコードすることで正しく送信できるようです。下記参照。


余談ですが、口の上が土になる「つちよし」は、常用漢字やJISの漢字集合では「吉」に包摂 (同じとみなす) されています。
つまり、「吉」は「さむらいよし」なのではなく、「つちよしとさむらいよしのどちらでもいい文字」なのです。
ですから「吉」を使っていても間違いではなく、正しいです。

ただ、かつて戸籍簿へ登載する姓の表記に「つちよし」を使いたいとの訴えがあり、裁判所の決定によって認められた例はあるようです。その場合も日常の事務では「吉」を使っていることがほとんどだと思われます。

投稿2024/05/24 01:41

編集2024/05/24 04:29
ikedas

総合スコア4441

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nana_mag

2024/05/26 00:27

確認遅くなりました。 なるほど、ユニコードの登録順によって取り扱いが変わってくるのですね、勉強になります。自分でエンコードまでするかは時間の問題もあるので少し考えます。 原因と解決方法の方向性を提示頂いたのでベストアンサーにさせて頂きます、ありがとうございました!
guest

0

GmailApp.sendMail() ではなく MailApp.sendMail() を使うと改善するかもしれません。

投稿2024/05/23 04:21

int32_t

総合スコア21421

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nana_mag

2024/05/23 05:24

記載不足で申し訳ありません...(補足追記いたしました) デフォルトのアドレス以外から送信が必要なので、GmailApp.sendMail()を使用しております。 MailApp.sendMail()は送付元アドレスの指定は出来ない認識ですが、もし何かご存じでしたらご教示いただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問