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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Gmail

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

Google Apps Script

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

5624閲覧

【GAS】一斉送信メール本文内に画像を挿入したい

Sean8

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Gmail

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

Google Apps Script

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/12/14 03:36

編集2020/12/14 04:17

前提・実現したいこと

Google scriptとドキュメントを使い、複数人に一括メール送信ができるツールを作ろうと思っています。
テキストのみ送信は出来るようになったのですが、ドキュメントで作成したメール本文に画像を載せてみたのですが
画像付きでの送信ができません。
スクリプトエディタのどこのコードをどう変えたらよいのか見当がつかず、困っている状況です。
どなたかご教授いただければ幸いです。

発生している問題・エラーメッセージ

相手の受信メールに画像が入った形で送りたいのですが、 テキストのみの状態で送られてしまいます。

該当のソースコード

function sendMail(){

/* スプレッドシートのシートを取得と準備 */
var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得

/* ドキュメント「メール本文テスト」を取得する */
var DOC_URL = 'https://docs.google.com/document/d/○○/edit';
var strdoc = DocumentApp.openByUrl(DOC_URL);//ドキュメントをIDで取得
var docText = strdoc.getBody().getText();//ドキュメントの内容を取得

/* メール表題、fromアドレス、差出人名を準備 */
var strSubject="年賀状_○○"; //表題
var strFrom="○○@○○.jp"; //From
var strSender="○○"; //差出人

/* シートの全ての行について社名、姓名を差し込みログに表示*/
for(var i=2;i<=rowSheet;i++){

var strCompany=mySheet.getRange(i,1).getValue(); //先方企業名 var strBushomei=mySheet.getRange(i,2).getValue(); //部署名 var strYakushokumei=mySheet.getRange(i,3).getValue(); //役職名 var strSecond=mySheet.getRange(i,4).getValue(); //姓 var strFirst=mySheet.getRange(i,5).getValue(); //名 var strTo=mySheet.getRange(i,6).getValue(); //toアドレス var strTantousha=mySheet.getRange(i,7).getValue(); //担当者 var strBody=docText .replace(/{先方企業名}/,strCompany) .replace(/{部署名}/,strBushomei) .replace(/{役職名}/,strYakushokumei) .replace(/{姓}/,strSecond) .replace(/{名}/,strFirst) .replace(/{担当者}/,strTantousha); //社名、部署名、役職名、姓、名、担当者を置換

GmailApp.sendEmail(
strTo, //toアドレス
strSubject, //表題
strBody, //本文
{
from: strFrom, //fromアドレス
name: strSender //差出人
}
);

}
}

試したこと

htmlbodyにしたりしましたが、そもそも構文が間違っており、
メールすら送れない状況になりました。。。
上記、構文ではテキストのみの送信は可能でした。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

Sean8

2020/12/14 04:50

ご回答ありがとうございます。 参考になりました!ありがとうございます。 ただ、今回は、メールに添付ではなく、本文中に挿入したく・・・
guest

回答2

0

ベストアンサー

javascript

1const q310125 = () => { 2 const sheet = SpreadsheetApp.getActiveSheet(); 3 4 const documentUrl = 'https://docs.google.com/document/d/ ... /edit'; 5 const document = DocumentApp.openByUrl(documentUrl); 6 const text = document.getBody().getText(); 7 const imageFileName = "somefilenameof.jpg"; 8 const image = DriveApp.getFilesByName(imageFileName).next().getBlob(); 9 10 const subject = "年賀状_○○"; 11 const from = "○○@○○.jp"; 12 const sender ="○○"; //差出人 13 14 15 sheet.getDataRange().getValues().slice(1).forEach(r=>{ 16 const [,,,,, to,] = r; 17 const keys = ['{先方企業名}','{部署名}','{役職名}','{姓}','{名}','{never}','{担当者}']; 18 const body = keys.reduce((a,c,i)=> a.replace(c,r[i]),text); 19 GmailApp.sendEmail(to, subject, body, {from: from, name: sender, htmlBody:body, inlineImages:{[imageFileName]:image}}); 20 }); 21} 22/* document の中身 23<!DOCTYPE html> 24<html> 25 <body> 26 <h1>title</h1> 27 <img src="cid:somefilenameof.jpg" /> 28 <ul> 29 <li>{先方企業名}</li> 30 <li>{部署名}</li> 31 <li>{役職名}</li> 32 <li>{姓}</li> 33 <li>{名}</li> 34 <li>{担当者}</li> 35 </ul> 36 </body> 37</html> 38*/

投稿2020/12/18 14:07

編集2020/12/21 20:50
papinianus

総合スコア12705

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

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

papinianus

2020/12/18 14:11

回答済みの質問をあまり見にこないので、次にむけて助言を。 ちゃんと丸投げしてください。画像が何枚とか、html はどこにあるの(planebody じゃなく html が必要です)とか、そういうのかかないと欲しい回答は来ませんよ。「自分で直せます!」というなら他の回答からリンクされている過去質問で対応できるわけで、それがベストアンサーでいいですよね。
guest

0

こちらが参考になるかと。
ちょっとコードを修正して実現できるってものではないです。
https://teratail.com/questions/269325

投稿2020/12/14 05:43

sawa

総合スコア3002

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

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

Sean8

2020/12/14 07:21

ありがとうございます。 こちら参考にして、いろいろ修正してみましたが、うまくいかずでして・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問