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

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

ただいまの
回答率

90.84%

  • Google Apps Script

    630questions

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

  • Gmail

    89questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 124

koromo_t

score 47

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

  MailApp.sendEmail(dAddress,subject,content);

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

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var val = sheet.getRange('B'+ sheet.getLastRow()).getValue();
  var val2 = sheet.getRange('D'+ sheet.getLastRow()).getValue();
  var val3 = sheet.getRange('A'+ sheet.getLastRow()).getValue();

function sendNotification() { 
  // もし列Dの値に異動があれば
  if(val2!=''){ // = if you edit data in col D
  var dAddress = "***@gmail.com";
  var subject = "***";
  var content = "名前:"+val+"\n";
      content += Utilities.formatDate(val3,'JST','yyyy年M月d日 H時m分')+"\n";
      content += "**********************\n"+val2;
  // メール通知する
  MailApp.sendEmail(dAddress,subject,content);
  }
}

解決後のまとめ(2018/05/28 6:17)

stshishoさんの回答により、解決しました。
こんな感じのスクリプト。

function sendNotification() { 
  // もし列Dの値に異動があれば
  if(val2!=''){ // = if you edit data in col D
  var dAddress = "***";
  var subject = "***";
  var content = "名前:"+val+"\n";
      content += Utilities.formatDate(val3,'JST','yyyy年M月d日 H時m分')+"\n";
      content += "**********************\n"+val2;
  // メール通知する
  content = content.replace(/\n/g,'<br>'); //必要があれば改行コードを<br>に差し替え
  MailApp.sendEmail({
    to      :dAddress,
    subject :subject,
    htmlBody:content //←pタグで挟んでもいい
  });
  }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+3

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

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

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

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

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

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

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/26 10:46

    回答ありがとうございます!
    なるほど! 残りは定義部分なので不要かと思ってしまいました…。
    すみません、取り急ぎ、質問文に追記1を追記します!

    テキストエディタにコピペしたところ、やはり、
    「プログラム的に本文中に改行コードが挿入される」、
    まさにそういうことが起きるようです。
    おそらくGmail側の機能の一環だと思うのですけど、
    そのあたりを制御するスクリプトの書き方などあればいいなと考えました。

    キャンセル

  • 2018/05/26 19:57

    > 「プログラム的に本文中に改行コードが挿入される」、まさにそういうことが起きるようです。

    なるほど。
    content整形部分の"**********************"とval2の長さに起因するのではないか、ということですね。
    であるならば、具体的にはそれぞれ何文字で改行されるか、境界値を洗い出してみてください。
    そして、常に安定して再現されることを検証してみてください。
    (半角文字のみ、全角文字のみ、混合などの条件も追加すれば尚良です)

    キャンセル

  • 2018/05/27 01: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

    キャンセル

  • 2018/05/27 02:59

    追記です。重要なことかもしれません。
    「以前のGmail」から見ると、おっしゃる通り、
    メールは自動改行なしの状態で表示されるようです。
    ただ、そのように見えるだけで、実際は改行コードも入っています。
    というのも、メール通知のシステム上、Googleフォーム→GAS→整形したメールを自分のGmailアドレスに送信(「通知メール」とする)→Gmailにおいて、受信した「通知メール」を自分のケータイに送信するフィルタを設定しているので、「通知メール」はケータイにも送信される。このとき、ケータイに来たメールは自動改行されている。
    そして、「新しいGmail」から見ると、やはり自動改行された状態で表示されます。
    以上のことより、プログラム的には?「新しいGmail」から見た状態が、
    一番正しいのだと思われます。

    そして、手のひらを返す?わけではないのですが、
    いろいろと考えているうちに、改行のタイミングが多少、流れを無視することになっても、
    適当に改行が入るほうが、むしろ読みやすいのかもしれない、
    という気持ちも生まれつつあります。

    キャンセル

  • 2018/05/27 09:22

    検証ありがとうございます。

    > 「全角で38文字」になったタイミングで、

    個人的にメール本文では上記の文字数以前に改行する癖がついていますので、すっかり失念していましたが、概ねのメールソフトやアプリにおける送信時仕様ですね。
    回答に補足しておきます。

    キャンセル

  • 2018/05/27 11:01

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

    キャンセル

  • 2018/05/27 14:19

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

    キャンセル

  • 2018/05/28 06:56 編集

    回答ありがとうございます!
    結論から言うと、期待通りの結果を得ることができました!

    最初いただいたコードをそのままコピペしてテストすると、
    すべての文章がベタ打ち?の状態になり、ちょっと焦ったのですけど、
    そうならないための対策が1つ目のメモ部分だったのですね。
    これを取り入れたところ、無事、もともとあった改行を生かすことができました。

    2つ目のメモ、意外とここで詰まりまして、
    タグをそれぞれクォーテーションマークで挟むところまでは感覚的にできたのですけど、
    あとそれらを半角プラスで連結?させることがまだ身についておらず、
    しばし悩んだのですが、無事、そのことに気づくこともできました。
    ただ、pタグを使うと最初の行がちょっと下がるなと思う程度で、
    メリットがちょっとよくわからないので、とりあえずタグなしを採用してみることにします。

    と、そんな感じです。
    今回は「htmlBody」の知識が大きな収穫でした。ありがとうございます!
    Gmailが言うところの「リッチテキスト形式」というのは、
    HTMLメールのこと、という理解でいいみたいですね。

    /* 本題終わり */

    あと、ちょっとした興味を覚えたのですが、
    stshishoさんのお名前のSTとは、なにか意味のある言葉なのでしょうか?
    後半は師匠の意味かなと予想しました。

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    630questions

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

  • Gmail

    89questions

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

  • トップ
  • Gmailに関する質問
  • GASからメールが送信される際、1行に書かれた文字数が多かった場合、自動改行されてしまう。