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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

5165閲覧

GASの改行について

kuma903

総合スコア9

Google Apps Script

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2020/09/11 06:38

編集2020/09/11 16:21

GASでGmailからメールを取得→本文をPOSTでサーバに送信
というスクリプトを書いています。
メールの本文から抽出したメッセージが改行記号を認識していない様に見えます。
例えば、メール本文に
「テスト
2行目」
といったメールを送信し、ログで確認すると
「テスト2行目」
というメッセージになります。
しかし、
「テスト

3行目」
と送信すると
「テスト
3行目」

という状態です。
改行記号が1つの場合は無視し、2つ目の改行記号のみ認識しているように見えます。

Google

1function myFunction() { 2 var threads = GmailApp.getInboxThreads(); 3 for (var th in threads) { 4 var msgs = threads[th].getMessages(); 5 for (var msg in msgs) { 6 if(msgs[msg].getSubject() == "テスト"){ 7 Logger.log(msgs[msg].getPlainBody());//メール本文をログに書き出す 8 var message = msgs[msg].getPlainBody(); 9 //置換テスト開始 10 let tikan = /\n/g; 11 message = message.replace(/\n\n/g,"\n"); 12 //置換テスト終了 13 14 var payload = 15 { 16 "message" : message 17 }; 18 19 var options = 20 { 21 "method" : "post", 22 "payload" : payload 23 }; 24 25 UrlFetchApp.fetch("POST受付サーバアドレス", options); 26 27 28 29 msgs[msg].markRead(); //メールを既読にする 30 msgs[msg].moveToTrash(); //メールを削除する 31 } 32 } 33 } 34} 35 36/* 参考 37 メールを取り出す「https://news.mynavi.jp/article/gas-4/」 38 メールを既読にする「https://qiita.com/ttyokoyama/items/1aa6977043fb0245342a」 39 GASでPOST送信「https://qiita.com/n0bisuke/items/a31a99232e50461eb00f」 40*/ 41

試したこと

  • 上記の通り、改行を1つから2つにしたら1行改行を確認した
  • 1行改行がGmailのメール本文では確認しているので、置換文字が1つのところは改行文字を2つにするテスト(コード内に記載)

ネットに記載されている解説を読むと、改行記号は\nと間違えていない様なので、メールの読み出しの時点で改行記号が消えているのかと思います。
(参考「https://auto-worker.com/blog/?p=1111」)

ネット上のサンプルを探してみていますが、スプレッドシートへの一部転記が多く、難航しています。
また、GASは初めて触るので調べ調べで試しています。少し、それもあって調べるのに難航しています。
ご教授、お力添え頂ければ幸いです。

追記

動作環境について
Windows 10上のGoogle ChromeでYahoo!メールから送信

改行記号が\r\nという回答をいただいたので\r\nでチャレンジ
・iPadからの送信時は\r\nで改行しているのを確認
・Windowsは\r\nではないのを確認(\rでも\nでもない)

改行記号が1つの場合は\nと判定されない。
改行記号が2つ続く場合は\nと判定される様子。

例1)「1行目
2行目」
>出力「1行目2行目」

例2)「1行目

3行目」
>出力「1行目
3行目」

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

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

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

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

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

guest

回答1

0

ベストアンサー

getPlainBody()でメールから得られるテキストの改行コードは'\r\n'です。試験的に、

message = message.replace(/\r\n/g, "★");

などとしてログに出力してみるとわかります。

実際のスクリプトでは、通常のテキストと同様に扱えるように、

message = message.replace(/\r\n/g, "\n");

などとして、\nひとつだけに置換してから以後の処理を行なうといいのではないかと思います。

追記:
後から「実はHTMLメールでした」と言われてもな。

Yahoo!メールも「テキストに切り替え」を行なってテキストメールで送れば、回答のスクリプトで処理できますよ。

「リッチテキスト」形式でメールを作成すると、HTMLメールとして相手に送られます。そうすると、getPlainBody()で得られるテキストに改行自体が含まれないことがあります。div要素などを使って(画面上では)自動的に次の行にレンダリングされるようにしている場合です。
いっぽう、br要素を使って明示的に次の行に移動している場合は、getPlainBody()には\nに変換されて格納されます。

投稿2020/09/11 06:59

編集2020/09/12 00:40
Daregada

総合スコア11990

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

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

kuma903

2020/09/11 07:58

Daregada 様 回答、ありがとうございます。 テストコード、ありがとうございます。 今出先で、パソコンが手元に無いので帰宅(22時以降)してから試したいと思います。 別用で日曜日まで伸びてしまうかもしれませんが、テストでき次第、お知らせいたします。
kuma903

2020/09/11 08:41

Daregada 様 お待たせ致しました。 iPadで動作しましたのでテストしてみました。 無事動作し、送ったメール本文のままPOST送信できました! ありがとうございます。
kuma903

2020/09/11 16:14

Daregada 様 iPadでは\r\nの改行記号の様で、\r\nで置換できました。 しかし、Windows10で送信したメールには\r\nでは改行していないようです。 そのため、解決には至っておりません。 確認が別環境だったのでうまくいったと勘違いしたようです。 申し訳ございません。 お手すきの際にご確認ください。 動作環境ですが、Yahoo!メールをGoogle Chromeで送信しました。
Daregada

2020/09/12 00:36

Yahoo!メールも「テキストに切り替え」を行なってテキストメールで送れば、回答のスクリプトで処理できますよ。 「リッチテキスト」形式でメールを作成すると、HTMLメールとして相手に送られます。そうすると、getPlainBody()で得られるテキストに改行自体が含まれないことがあります。div要素などを使って(画面上では)自動的に次の行にレンダリングされるようにしている場合です。 いっぽう、br要素を使って明示的に次の行に移動している場合は、getPlainBody()には\nに変換されて格納されます。 というわけで、「HTMLメールの改行(のように見える)状態」をgetPlainBody()でなんとかすることは「できません」。 なお、ベストアンサーを外されたので、以後は対応しません。
kuma903

2020/09/12 04:26

Daregada 様 ありがとうございます。 自分もHTMLの可能性を確かめるため、<br>で試しましたが反応しなかったのでHTMLの確認が漏れているかもしれません。 帰宅次第、確認させて頂きます。 ベストアンサーは、解決した事を示すのもと考えておりますので、解決でき次第、付けさせて頂きます。 ご迷惑をおかけしております。
kuma903

2020/09/12 11:59 編集

Daregada 様 この度はご迷惑をおかけしました。 リッチテキストを気にせずテストしていました。 「テキストに切り替え」を探し、切り替えて送信したところ、うまく\r\nで認識しました。 ガラケーを使っている人のためのシステムで、本日その人と会ったのでガラケーからもテストし、無事認識することを確認しました。 私の勉強不足が招いた結果です。 本当にご迷惑をおかけしました。 また、解決まで導いていただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問