実現したいこと
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 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!
------------
補足
特になし
節穴の目。
解答がわからないだけ。
まずGoogle Workspace デベロッパー サポートに問い合わせてみてください。当サイトのユーザにはGoogleのサービスを運営している人はいません。
コメントありがとうございます。
理由はともかく、結果がご希望であれば、
function sendEmail() {
// MailApp.sendEmail({
// to: "test@example.com",
// subject: "テスト",
// body: "☆:*:★:*:☆:*:★:*:☆:*:★\n hogehoge!",
// });
GmailApp.sendEmail(
"test@example.com",
"テスト",
"☆:*:★:*:☆:*:★:*:☆:*:★\n hogehoge!",
);
}
MailAppではなくGmailAppで送信してはいかがでしょうか。
> YellowGreen
MailApp の方がオプションが多い気がしていて MailApp を多用していました。
でも GmailApp もあまり違いはないようですね。
私の記事 https://qiita.com/studiosimply/items/752be27b575224f6919b の内容も GmailApp で実装できるのかな?
> ikedas
> Google Workspace 管理者フォーラムへようこそ。
> Google/Google Workspace サービスとの統合に関するトピックは、通常、 stackoverflow.comに投稿することをお勧めします。このフォーラムは、特にサービス管理に関して Google Workspace 管理者ユーザーを支援することを目的としているため、統合のトピックに詳しい人が閲覧したり読んだりすることはほとんどありません。
ちゃんとググりましたか。
https://support.google.com/a/answer/6103110?hl=ja
ここの説明を**すべて**読んで、書いてあることをすべて試してください。
面倒なのでたぶんやりません。
上記 stackoverflow.com に質問したところ一つの解答が投稿されました。
的確な質問で解答を得ることも悧巧な証し。回答の投稿すら叶わない者とは鯨と鰯。
この質問は解決済みということでよろしいのですか。
1つの問題回避策が見つかったということです。
それを解決と判断して良いかはわかりません。
> 私の記事 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オブジェクトの要素は、
キー名と値の変数名が同じなので、変数名のみで構いません。
GmailApp の扱いがよくわかっていませんでしたので、参考になります。
あとでチャレンジしてみようと思います。
たぶん MailApp でも attachments は配列で渡せるのでしょうね。
> たぶん 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の指定で送信元アドレスにエイリアスも使えます。
本文テキストの改行後のスペースには違いがありますが...
問題回避策の一つにはなりますでしょうか。