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

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

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

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

Q&A

解決済

3回答

1970閲覧

【GAS】異なる添付ファイルを呼び出してメール送信をしたいが、エラーで送信できない

musshu

総合スコア3

Google Apps Script

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

0グッド

0クリップ

投稿2021/08/03 11:22

編集2021/08/04 12:59

前提・実現したいこと

※アドバイスありがとうございます。メールにファイルが添付されて、送信がされるところまでは解決できました。

GAS初心者です。
スプレッドシートに作成したリストと、ドキュメントに保存した文章を使って、
異なる宛先に異なる添付ファイルをつけて、メールを送信したいと思っています。

■スプレッドシートのイメージ
A列(namae) B列(company) C列(address) D列(ichiran:ファイル名)

■ドキュメントのイメージ
●●会社(B列より)
▲▲様(A列より)
いつもお世話になっております。~

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

該当のソースコード

function sendMail(){ const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow();; const DOC_URL = 'メールの本文'; const doc = DocumentApp.openByUrl(DOC_URL); const docText = doc.getBody().getText(); const subject = 'タイトル'; for(let i = 3; i <= lastRow; i++){ const namae = sheet.getRange(i, 1).getValue();  const company = sheet.getRange(i, 2).getValue(); const address = sheet.getRange(i, 3).getValue(); const ichiran = sheet.getRange(i, 4).getValue();   const body = docText .replace('{会社}',company) .replace('{名前}',namae) var tempu = DriveApp.getFilesByName(ichiran).next(); GmailApp.sendEmail(address, subject, body, { cc: '@gmail.com', attachments: [tempu]}); } } }

試したこと

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

var tempu = DriveApp.getFilesByName(ichiran).next()

これで指示すると動いたのですが、指定したファイルが勝手にpdf変換される事象が発生しております。
これはどうやって解決すればよいのでしょうか?GASの仕様でしょうか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

なんか質問が変わっちゃったみたいですが、最初のエラーの部分に関しては、

ファイルのIDは一意なので、 DriveApp.getFileById(ichiran) は 単一のファイルが返るので、.next() が不要です。

ファイル名で取得しようとすると、GoogleDriveは同じファイル名が同じフォルダ内に存在できるので、DriveApp.getFilesByName(ichiran) では、ファイルイテレーターが返ってくるので .next()で一つずつ取り出す必要があります。

↓返り値を参照

https://developers.google.com/apps-script/reference/drive/drive-app

指定したファイルが勝手にpdf変換

こっちは元がなんのファイルか不明なので、なんとも言えません。
添付したいファイルは、GoogleスプレッドシートやGoogleドキュメントだったりしませんよね?

投稿2021/08/04 07:27

sawa

総合スコア3002

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

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

musshu

2021/08/04 10:45

アドバイスありがとうございます。 getFileByIdではそもそも.next()が不要なのですね、勉強になりました。 また、添付ファイルがpdfに返還される件ですがファイル名指定の際拡張子が抜けていればファイルがpdf化されることがわかりました。また新しい問題がでてきましたが、こちらは解決いたしました。
sawa

2021/08/04 12:37

回答の際に指摘すればよかったですが、最初の質問が解決したら 解決済みでクローズして下さい。 その後、新たなエラーや質問がある場合は、まずはご自身で検索やトライ&エラーを試みたうえで、どうしても解決しない場合に別質問として立ち上げるべきです。 次から次へと質問を編集すると、ナレッジとして後々他の閲覧者の役に立たなくなりますし、誰も回答してくれなくなります。
musshu

2021/08/04 12:51

そのようにします!ありがとうございます。
guest

0

**attachments: [tempu]**のところですが、blobというやつで渡す必要があるようなので、

GAS

1GmailApp.sendEmail(address, subject, body, { 2 cc: "@gmail.com", 3 attachments: [tempu.getBlob()], 4});

または、

GAS

1GmailApp.sendEmail(address, subject, body, { 2 cc: "@gmail.com", 3 attachments: [tempu.getAs(MimeType[tempu.getMimeType()])], 4});

で出来るかもしれません。
間違っていたらすみません。

投稿2021/08/03 13:04

fake_shibe

総合スコア806

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

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

musshu

2021/08/04 07:08

コメントありがとうございます。上記の方法を試しても改善がありませんでしたが、 添付ファイルの指定をgetfilesByNameに変えるとうまくいきました。 やはりファイルIDの指定がうまくいっていなかったのかもしれません。
guest

0

セミコロン;が抜けているようですが・・・・?

var tempu = DriveApp.getFileById(ichiran).next()

投稿2021/08/03 12:34

odataiki

総合スコア938

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

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

musshu

2021/08/04 07:08

コメントありがとうございます。セミコロンを入れても改善しませんでしたが、 添付ファイルの指定をgetfilesByNameに変えるとうまくいきました。 やはりファイルIDの指定がうまくいっていなかったのかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問