質問: id); }); return hasId; } ``` 参考にしたスクリプトは下記のものです。 https://tonari-it.com/gas-gmail-messageid/ どなたか、ご教授を宜しくお願いいたします。
回答: 次のような修正はいかがでしょうか。 1. 関数名について 今、関数名に2バイト文字(`function 複数検索メール取得() {}`)を使用しておられますが、できれば、`function getSrarchedMails() {}`など、1バイト文字にしてください。確か2バイト文字で関数名を指定した場合、GASでは動作しなかったように思われます。 2. 検索クエリについて 修正ポイントは次の通りです。 1. OR検索は、`{}`を使います。AND検索は`()`です。 * 今の場合、"B2:B6"の値をOR検索し、toとafterはAND検索しますので、次のように設定します。 * 'Subject:{kw1 kw2 kw3 kw4 kw5} To:(ABC@gmail.com) after:2019/3/1' * ここで、`kw1 kw2 kw3 kw4 kw5`はそのまま文字列として扱われてしまいますので、これを変数として使用するように修正します。 1. "B2:B6"の値を一度に取得するとコストが低くなります。 これらをスクリプトへ反映させるために次のような修正を行ってください。 ### From ``` var kw1 = sh.getRange('B2');//keyword1 var kw2 = sh.getRange('B3');//keyword2 var kw3 = sh.getRange('B4');//keyword3 var kw4 = sh.getRange('B5');//keyword4 var kw5 = sh.getRange('B6');//keyword5 var strTerms = ('Subject:(kw1 kw2 kw3 kw4 kw5 To:(ABC@gmail.com) after:2019/3/1'); ``` ### To ``` var kws = sh.getRange("B2:B6").getValues().map(function(e) {return e[0]}).join(" "); var strTerms = 'subject:{' + kws + '} to:ABC@gmail.com after:2019/3/1'; ``` 3. 他のエラーについて おそらく上記の変更を行うと、次は`hasId(id)`内でエラーが発生すると思われます。原因は、`sh.getRange(1, 3, sh.getLastRow(),1).getValues()`の`sh`が与えられていないためです。そこで、次のような修正をお願いします。 ### From ``` if(!hasId(msid)){ ``` ### To ``` if(!hasId(msid, sh)){ ``` これと下記の修正もお願いします。 ### From ``` function hasId(id){ ``` ### To ``` function hasId(id, sh){ ``` 参考 * Gmail で使用できる検索演算子 編集 > > 一番初めにスクリプトの修正をして下さった時に抽出したデータにメッセージに紐づくRe(レス)も抽出されていた為、出来ればファーストメッセージだけを抽出したかっただけです。 > > > 上記のコメントにより修正するポイントは下記の通りです。「ファーストメッセージだけを抽出」については、メッセージのインデックス0番目がトップのメッセージを意味します。 ### From ``` for(var i=0;i