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

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

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

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

3回答

671閲覧

Google Apps Script で E-Mail 送信して、「\n 」を表示したい。

studiosimply

総合スコア4

Google Apps Script

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

2クリップ

投稿2023/12/31 02:37

編集2024/01/04 01:20

実現したいこと

Google Apps Script で E-Mail 送信して、「\n 」を表示したい。
※「☆::★::☆::★::☆::★<改行><半角スペース>hogehoge!」と表示したい。
--<目標>--
☆:
:★::☆::★::☆::★
<半角スペース>hogehoge!
------------

発生している問題・分からないこと

--<結果>--
☆::★::☆::★::☆:*:★
[半角スペース2つ]hogehoge!
------------
body に「\n(改行)」を入れた直後に「半角スペース」を入れると「半角スペース」が2つになってしまう。

該当のソースコード

GoogleAppsScript

1function sendEmail() { 2 MailApp.sendEmail({ 3 to: "test@example.com", 4 subject: "テスト", 5 body: "☆:*:★:*:☆:*:★:*:☆:*:★\n hogehoge!", 6 }); 7}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

試したこと1

GoogleAppsScript

1function sendEmail() { 2 MailApp.sendEmail({ 3 to: "test@example.com", 4 subject: "テスト", 5 body: "☆:*:★:*:☆:*:★:*:☆:*:★\n&nbsp;hogehoge!", 6 }); 7}

--<結果>--
☆::★::☆::★::☆:*:★
&nbsp;hogehoge!
------------

試したこと2

GoogleAppsScript

1function sendEmail() { 2 MailApp.sendEmail({ 3 to: "test@example.com", 4 subject: "テスト", 5 body: "☆:*:★:*:☆:*:★:*:☆:*:★[\r\n]{2} hogehoge!", 6 }); 7}

--<結果>--
☆::★::☆::★::☆:*:★[
]{2} hogehoge!
------------

補足

特になし

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

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

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

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

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

studiosimply

2023/12/31 04:12

解答がわからないだけ。
ikedas

2023/12/31 06:11

まずGoogle Workspace デベロッパー サポートに問い合わせてみてください。当サイトのユーザにはGoogleのサービスを運営している人はいません。
studiosimply

2023/12/31 07:31

コメントありがとうございます。
YellowGreen

2023/12/31 20:53

理由はともかく、結果がご希望であれば、 function sendEmail() { // MailApp.sendEmail({ // to: "test@example.com", // subject: "テスト", // body: "☆:*:★:*:☆:*:★:*:☆:*:★\n hogehoge!", // }); GmailApp.sendEmail( "test@example.com", "テスト", "☆:*:★:*:☆:*:★:*:☆:*:★\n hogehoge!", ); } MailAppではなくGmailAppで送信してはいかがでしょうか。
studiosimply

2024/01/02 04:04

> ikedas > Google Workspace 管理者フォーラムへようこそ。 > Google/Google Workspace サービスとの統合に関するトピックは、通常、 stackoverflow.comに投稿することをお勧めします。このフォーラムは、特にサービス管理に関して Google Workspace 管理者ユーザーを支援することを目的としているため、統合のトピックに詳しい人が閲覧したり読んだりすることはほとんどありません。
studiosimply

2024/01/02 08:23

面倒なのでたぶんやりません。
studiosimply

2024/01/02 22:53

上記 stackoverflow.com に質問したところ一つの解答が投稿されました。
studiosimply

2024/01/03 04:58 編集

的確な質問で解答を得ることも悧巧な証し。回答の投稿すら叶わない者とは鯨と鰯。
YellowGreen

2024/01/03 12:15

この質問は解決済みということでよろしいのですか。
studiosimply

2024/01/03 12:25

1つの問題回避策が見つかったということです。 それを解決と判断して良いかはわかりません。
YellowGreen

2024/01/04 05:36 編集

> 私の記事 https://qiita.com/studiosimply/items/752be27b575224f6919b の内容も GmailApp で実装できるのかな? 私への質問なのか独り言なのか不明だったので返信していませんでしたが、 コメント欄で記されているのでコメント欄で返信しますね。 function sendEmail(recipient, cc, bcc, subject, msgBody, imageFiles = []) { // 改行コードを変換する(テキスト形式修復) var subject = subject.replace(/<br>/g, ' ').replace(/\n/g, ' '); var body = msgBody.replace(/<br>/g, '\n'); // // 添付画像がないとき(★デフォルトの引数と重複につき削除) // if (imageFiles == null) { // imageFiles = []; // } // 画像レスポンスを取得する(★forループ重複につき削除) // var imageRes = []; // for (var i = 0; i < imageFiles.length; i++) { // imageRes[i] = UrlFetchApp.fetch(imageFiles[i][1]); // } // imageFilesがあれば添付ファイルを取得してファイル名を復元する var blob = [], fileName = [], extension = []; var attachments = []; // ★追加 for (var i = 0; i < imageFiles.length; i++) { blob[i] = UrlFetchApp.fetch(imageFiles[i][1]).getBlob(); // ★修正 fileName[i] = decodeURIComponent(blob[i].getName());// 元のファイル名(拡張子含む) extension[i] = fileName[i].match(/\.[^.]+$/)[0];// 元の拡張子 if (imageFiles[i][0] != null && imageFiles[i][0] != '') { fileName[i] = imageFiles[i][0] + extension[i]; }// 新しいファイル名(拡張子含む) blob[i] = blob[i].setName(fileName[i]);// (拡張子含む) attachments.push(blob[i]); // ★追加 } // Email 送信する GmailApp.sendEmail( recipient, subject, body, { cc, // ★キー名と同名なので変数のみに修正 bcc, // ★同上 attachments, // ★追加したので下の6行削除 // attachments: // imageFilesがあれば添付ファイルとする // imageFiles.length == 1 ? [blob[0]] // : imageFiles.length == 2 ? [blob[0], blob[1]] // : imageFiles.length == 3 ? [blob[0], blob[1], blob[2]] // : imageFiles.length == 4 ? [blob[0], blob[1], blob[2], blob[3]] // : null } ); } GmailAppとMailAppの違いは、送信メールアドレスにエイリアスを使えるかどうかでしょうか。 ※ 念のため 添付画像がないときは、引数imageFilesを削除するか空の配列のままこの関数を呼び出します。 あえて引数をimageFiles = nullとしてから送信すると上記の修正後はエラーになります。 また、 sendEmailメソッドの中のbodyオブジェクトの要素は、 キー名と値の変数名が同じなので、変数名のみで構いません。
studiosimply

2024/01/04 04:51

GmailApp の扱いがよくわかっていませんでしたので、参考になります。 あとでチャレンジしてみようと思います。 たぶん MailApp でも attachments は配列で渡せるのでしょうね。
YellowGreen

2024/01/04 06:14 編集

> たぶん MailApp でも attachments は配列で渡せるのでしょうね。 元のコードがMailAppに配列渡しになってますよね。 例えば、 imageFiles.length == 4のとき attachments: [blob[0], blob[1], blob[2], blob[3]] と返信を作成していて気が付いたのですが、 attachmentsは配列になっているので、 attachments: [...attachments] とするのは配列要素を配列に挿入して渡しているので、 attachments: attachmentsとして そのままオブジェクトの要素として渡せばいいだけでした。 その上で、キー名と変数名が同じなので attachments: attachments, とせずとも、 attachments, だけで良かったです。 上のコードはそのように修正してあります。 MailApp.sendEmail(recipient, subject, body, {cc, bcc, attachments, ...})という書き方のときは、 GmailApp.sendEmail(recipient, subject, body, {cc, bcc, attachments, ...})に変更するだけで 同じ名前のメソッドで、同じ引数を使えます。 なお、 MailApp.sendMail({to, subject, body, cc, bcc, attachments, ...})という書き方のときは、 全てをオブジェクトで渡すメソッドはGmailAppにはないので、 GmailApp.sendEmail(recipient, subject, body, {cc, bcc, attachments, ...})という書き方に 変更しなければなりません。 また、GmailAppのsendEmailはfromの指定で送信元アドレスにエイリアスも使えます。 本文テキストの改行後のスペースには違いがありますが... 問題回避策の一つにはなりますでしょうか。
guest

回答3

0

リファレンスを参照したところsendEMailはhtmlBodyという引数をとれるようです。
attachmentsの話をしているのですでにご参照済みかもしれませんが...
以下のようにするのはどうでしょうか?

GoogleAppsScript

1function sendEmail() { 2 MailApp.sendEmail({ 3 to: "test@example.com", 4 subject: "テスト", 5 body: `☆:*:★:*:☆:*:★:*:☆:*:★\n hogehoge!`, 6 htmlBody: `☆:*:★:*:☆:*:★:*:☆:*:★<br>&nbsp;hogehoge!` 7 }); 8}

planeテキストだとどのように表示されるかはテストできていませんが、大体のメールアプリでご要望通りの表示ができると思います。
結局のところbodyをどのようにhtml上に表現するかはユーザ側ではなくサービスを提供する側の問題であるように思われるので、ユーザー側でunicodeをつかって空白を挿入するなどひねくりまわすのが腑に落ちないのなら、はじめからhtml形式でbodyを与えてほかの解釈の余地を与えない方法をとるしかないのではないかと思います。

投稿2024/01/07 23:15

yutoml

総合スコア9

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

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

studiosimply

2024/01/08 05:26 編集

回答ありがとうございます。 Unicodeエスケープシーケンスの解答でひとまず私は満足しています。他ユーザーが「質問に対する回答となっていない投稿」という指摘をしているだけです。 html形式ですとbody内のリンクが無効になった経験がありますので敢えて使用していません。
guest

0

GoogleAppsScript

1body: "☆:*:★:*:☆:*:★:*:☆:*:★\n\u{00A0}hogehoge!",

これは一つの解答です。Unicodeエスケープシーケンスを利用しています。
▼参考

email - How to send an e-mail to display "\n " newline followed by half width space? - Stack Overflow
https://stackoverflow.com/questions/77744092/how-to-send-an-e-mail-to-display-n-newline-followed-by-half-width-space

投稿2024/01/02 11:06

編集2024/01/06 03:45
studiosimply

総合スコア4

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

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

studiosimply

2024/01/03 23:39

仰る通りこの解答は、単なる回避策でしかありません。 ですから質問を締め切ってはいないのです。 意義を唱えるくらいなら、回答に回れるならぜひお願いします。
studiosimply

2024/01/04 03:13

回答者より I don't understand what that means for me... If you want the reason that it doesn't work with your original script, it is because your editor or os or something else doesn't allow you to directly input "half width space". The code you showed contains only a space (\u{0020}) and not a half width space(\u{00A0}) here: body: "───────────────\n Hel: The space between \n and Hel is U+0020 only.
YellowGreen

2024/01/04 13:09

質問の仕方が...とは思いますが、 皮肉っぽい回答ですよね。
guest

0

「\n 」を表示したい。

html なら、<br>なんでは

投稿2023/12/31 06:03

y_waiwai

総合スコア87784

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

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

studiosimply

2023/12/31 06:08

回答ありがとうございます。 html のオプションを記述してないので、プレーンボディの送信となり、改行は「\n」です。 改行「\n」自体は機能しています。
y_waiwai

2023/12/31 08:02

なら、エスケープシーケンスで、\\r とか \\n としましょう
studiosimply

2023/12/31 11:08

\\r とすると、 ☆:*:★:*:☆:*:★:*:☆:*:★\r hogehoge! \\n とすると、 ☆:*:★:*:☆:*:★:*:☆:*:★\n hogehoge! と表示され、いずれも改行が機能しません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問