前提・実現したいこと
ここに質問の内容を詳しく書いてください。
ネットフリマで売れた商品の売上管理表を、スプレッドシートで作っております。商品が売れるたび購入通知をgmailで取得し、メールに記載されている商品情報 (商品名・購入された日時など)がシート上に自動追記されるプログラムをGASで作っておりま
商品情報が重複で取得されないよう、トリガーで1時間ごとにプログラムを実行し、毎度1時間前以内に送られてきた購入通知のメールだけを取得したいです。
当方プログラミングに関しては素人です。
独学で調べ、「件名の定型文章」 「送信元のアドレス」 を検索条件にして購入通知メールを取得し、その商品情報をシートに書き出すところまでプログラムが書きあがりました。
あとは先述の方法で日時指定ができればプログラムが完成します。
日時指定の検索コードをどのように書けばいいか、試行錯誤してもわからずにいます。
ご教示いただけると幸いです。
ぜひ、よろしくお願いいたします。
発生している問題・エラーメッセージ
商品の購入通知のメールを取得後、商品情報がシート上に重複で書き出されてしまっています。 以前までメールのメッセージIDとsomeメソッドを使って重複を避けられないか試しておりましたが、なかなかうまくいかず時間だけが経っていたので、他の方法がないか考えました。 その結果、「GASトリガーで1時間ごとにプログラムを実行し、毎度1時間前以内に送られてきた購入通知のメールだけを取得すれば重複を避けられるのでは」という判断に至りました。 ですが、そのためのコードの書き方がわからないままです。
該当のソースコード
function autoRefresh() { var condition = ("subject:発送をお願いします from:no-reply@mercari.jp"); var thread = GmailApp.search(condition, 0, 5); var messages = GmailApp.getMessagesForThreads(thread); for(var i=0; i<messages.length; i++){ var id =messages[i][0].getId(); var date = messages[i][0].getDate(); var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); var plainBody = messages[i][0].getPlainBody(); var name =plainBody.match(/商品名.*/); var price =plainBody.match(/商品価格.*/); var site =plainBody.match(/メルカリをご利用.*/); sheet.getRange(lastRow+1,1).setValue(id); sheet.getRange(lastRow+1,3).setValue(name[0].replace('商品名 : ', '')); sheet.getRange(lastRow+1,5).setValue(site[0].replace('をご利用いただきありがとうございます。', '')); sheet.getRange(lastRow+1,7).setValue(date); sheet.getRange(lastRow+1,8).setValue(price[0].replace(/[^0-9]/g, '')); sheet.getRange(lastRow+1,9).setValue(0); } }
試したこと
getDateメソッドを使ってメールが送られてきた日時を取得し、それを検索条件にして新規の商品情報だけをシートに書き出せないか試しておりました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー