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

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

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

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

Google Apps Script

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

Q&A

解決済

1回答

15356閲覧

GASからメールが送信される際、1行に書かれた文字数が多かった場合、自動改行されてしまう。

koromo_t

総合スコア60

Gmail

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

Google Apps Script

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

0グッド

1クリップ

投稿2018/05/25 23:28

編集2018/05/27 21:35

GASにて、「Googleフォームからメッセージを得た際、
そのメッセージをメールに記入し、メール通知する」というスクリプトを書きました。
メールが送信されるまでは成功しているのですが、
メールが送信される際、1行に書かれた文字数が多かった場合、
自動改行されてしまうことがわかりました。
これを、スクリプトの改造により、自動改行しないようにすることは可能でしょうか。
現在、スクリプトは以下のようになっています。(※一部抜粋)

javaScript

1 MailApp.sendEmail(dAddress,subject,content);

追記1(2018/05/26 10:37)

javaScript

1 var ss = SpreadsheetApp.getActiveSpreadsheet(); 2 var sheet = ss.getActiveSheet(); 3 var val = sheet.getRange('B'+ sheet.getLastRow()).getValue(); 4 var val2 = sheet.getRange('D'+ sheet.getLastRow()).getValue(); 5 var val3 = sheet.getRange('A'+ sheet.getLastRow()).getValue(); 6 7function sendNotification() { 8 // もし列Dの値に異動があれば 9 if(val2!=''){ // = if you edit data in col D 10 var dAddress = "***@gmail.com"; 11 var subject = "***"; 12 var content = "名前:"+val+"\n"; 13 content += Utilities.formatDate(val3,'JST','yyyy年M月d日 H時m分')+"\n"; 14 content += "**********************\n"+val2; 15 // メール通知する 16 MailApp.sendEmail(dAddress,subject,content); 17 } 18}

###解決後のまとめ(2018/05/28 6:17)
stshishoさんの回答により、解決しました。
こんな感じのスクリプト。

javaScript

1function sendNotification() { 2 // もし列Dの値に異動があれば 3 if(val2!=''){ // = if you edit data in col D 4 var dAddress = "***"; 5 var subject = "***"; 6 var content = "名前:"+val+"\n"; 7 content += Utilities.formatDate(val3,'JST','yyyy年M月d日 H時m分')+"\n"; 8 content += "**********************\n"+val2; 9 // メール通知する 10 content = content.replace(/\n/g,'<br>'); //必要があれば改行コードを<br>に差し替え 11 MailApp.sendEmail({ 12 to :dAddress, 13 subject :subject, 14 htmlBody:content //←pタグで挟んでもいい 15 }); 16 } 17}

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

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

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

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

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

guest

回答1

0

ベストアンサー

一部過ぎますよ。。。
これでは具体的な文字数やメッセージ本文を整形する際の処理に問題があるのか判断ができないですよ。

メールが送信される際、1行に書かれた文字数が多かった場合、

自動改行されてしまうことがわかりました。

そのような現象に遭遇したことがありませんので、下記の簡単なスクリプトで検証しました。
しかしながら、自動改行される、という現象の再現はできませんでした。
※ここでの自動改行されるという定義は、プログラム的に本文に中に改行コードが挿入されることとします。

javascript

1function hoge() { 2 var content = '1234567890'; 3 for(var i = 0; i < 5; i++){content += content;} 4 MailApp.sendEmail(送信先アドレス,件名,content); 5 return; 6}

考えられることは、メーラーによる本文の自動改行(表示)ではないか、ということです。
試しに本文をコピーして、テキストエディタへペーストしてください。
(書式等を維持してペーストすると意味がありませんので)

以下はメール表示領域の違いによる自動改行画像です。
メール表示領域の違いによる自動改行その1
メール表示領域の違いによる自動改行その2

[追記]
koromo_tさんの検証より、概ねのメールソフトやアプリにおける送信時仕様※ですね。
参考にされたサイトの情報ですと、受信側の環境依存にも捉えられますね。

※MIME仕様によるBase64エンコード
Gmailでの確認方法は メッセージ表示状態→「(縦の)…」→メッセージのソースを表示
「Content-Transfer-Encoding: base64」を確認できます。

[追記2]
以下のようにHTMLメールとして送信する方法もあります。

javascript

1function sendNotification(){ 2/*省略*/ 3 // メール通知する 4 //content = content.replace(/\n/g,'<br>'); //必要があれば改行コードを<br>に差し替え 5 MailApp.sendEmail({ 6 to :dAddress, 7 subject :subject, 8 htmlBody:content //←pタグで挟んでもいい 9 }); 10}

[参考]
ウィキペディア Base64
Class MailApp sendEmail(message)

投稿2018/05/26 01:25

編集2018/05/27 05:41
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

koromo_t

2018/05/26 01:46

回答ありがとうございます! なるほど! 残りは定義部分なので不要かと思ってしまいました…。 すみません、取り急ぎ、質問文に追記1を追記します! テキストエディタにコピペしたところ、やはり、 「プログラム的に本文中に改行コードが挿入される」、 まさにそういうことが起きるようです。 おそらくGmail側の機能の一環だと思うのですけど、 そのあたりを制御するスクリプトの書き方などあればいいなと考えました。
退会済みユーザー

退会済みユーザー

2018/05/26 10:57

> 「プログラム的に本文中に改行コードが挿入される」、まさにそういうことが起きるようです。 なるほど。 content整形部分の"**********************"とval2の長さに起因するのではないか、ということですね。 であるならば、具体的にはそれぞれ何文字で改行されるか、境界値を洗い出してみてください。 そして、常に安定して再現されることを検証してみてください。 (半角文字のみ、全角文字のみ、混合などの条件も追加すれば尚良です)
koromo_t

2018/05/26 16:35

検証結果 以下、すべて行の最後にスペース1個が入っている(これも自動改行によるもの)、 それも含めた文字数です。 ・日本語(全角文字)のみの文字列→39個 ・日本語と、半角ローマ字が6個含まれた文字列→42文字 上記2件を比較して考えると、半角ローマ字は2文字で全角1文字と とらえられているようです。…って、まあ、道理なのですが(笑)。 すなわち、「全角で38文字」になったタイミングで、 「半角スペース1個」および「改行コード」が入る模様です。 ちなみに「日本語と、半角ローマ字が3個含まれた文字列」の場合は、 厳密に言えば「全角で37.5文字」ですが、小数点以下は四捨五入されるとみられ、 「全角で38文字」の扱いを受けるようです。 (文字列のあと、スペース1個と改行コードが入る。) --- いろいろ調べたところ、 メールを「リッチテキスト形式」にすると、自動改行問題は解消されそうな感じなので、 新規メール作成画面にてリッチテキスト形式に設定すれば、 その設定が記憶されるかと思ったのですけど、 たしかに自分でメールを作成する際は次回も記憶されているみたいなのですけど、 GASからメールを送信する際はどうしても「プレーンテキスト形式」に なってしまっていると思われます。ここが本件のネックのように思います。 [参考] ・Gmailで勝手に改行を入れられるのを解決 http://d.hatena.ne.jp/blooo/20090806/1249564412
koromo_t

2018/05/26 17:59

追記です。重要なことかもしれません。 「以前のGmail」から見ると、おっしゃる通り、 メールは自動改行なしの状態で表示されるようです。 ただ、そのように見えるだけで、実際は改行コードも入っています。 というのも、メール通知のシステム上、Googleフォーム→GAS→整形したメールを自分のGmailアドレスに送信(「通知メール」とする)→Gmailにおいて、受信した「通知メール」を自分のケータイに送信するフィルタを設定しているので、「通知メール」はケータイにも送信される。このとき、ケータイに来たメールは自動改行されている。 そして、「新しいGmail」から見ると、やはり自動改行された状態で表示されます。 以上のことより、プログラム的には?「新しいGmail」から見た状態が、 一番正しいのだと思われます。 そして、手のひらを返す?わけではないのですが、 いろいろと考えているうちに、改行のタイミングが多少、流れを無視することになっても、 適当に改行が入るほうが、むしろ読みやすいのかもしれない、 という気持ちも生まれつつあります。
退会済みユーザー

退会済みユーザー

2018/05/27 00:22

検証ありがとうございます。 > 「全角で38文字」になったタイミングで、 個人的にメール本文では上記の文字数以前に改行する癖がついていますので、すっかり失念していましたが、概ねのメールソフトやアプリにおける送信時仕様ですね。 回答に補足しておきます。
koromo_t

2018/05/27 02:01

表示方法については受信側の環境に依存するみたいですね。 ただ、送信時に自動改行処理が行われていることには変わりないので、 そもそもメール送信時に自動改行処理が行われないようにコントロールできれば、 自動改行処理が行われていないメールを送ることができるのではないかと考えたのですが、 それはもう、仕様だからやりようがない、という域の話なのでしょうか。
退会済みユーザー

退会済みユーザー

2018/05/27 05:19

HTMLメールとして送信することで回避できると思いますよ。 こちらも回答に補足追記しておきます。
koromo_t

2018/05/27 21:56 編集

回答ありがとうございます! 結論から言うと、期待通りの結果を得ることができました! 最初いただいたコードをそのままコピペしてテストすると、 すべての文章がベタ打ち?の状態になり、ちょっと焦ったのですけど、 そうならないための対策が1つ目のメモ部分だったのですね。 これを取り入れたところ、無事、もともとあった改行を生かすことができました。 2つ目のメモ、意外とここで詰まりまして、 タグをそれぞれクォーテーションマークで挟むところまでは感覚的にできたのですけど、 あとそれらを半角プラスで連結?させることがまだ身についておらず、 しばし悩んだのですが、無事、そのことに気づくこともできました。 ただ、pタグを使うと最初の行がちょっと下がるなと思う程度で、 メリットがちょっとよくわからないので、とりあえずタグなしを採用してみることにします。 と、そんな感じです。 今回は「htmlBody」の知識が大きな収穫でした。ありがとうございます! Gmailが言うところの「リッチテキスト形式」というのは、 HTMLメールのこと、という理解でいいみたいですね。 /* 本題終わり */ あと、ちょっとした興味を覚えたのですが、 stshishoさんのお名前のSTとは、なにか意味のある言葉なのでしょうか? 後半は師匠の意味かなと予想しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問