2017-05-11 4 views
0

特定の時間に受信したすべてのメールを[email protected]に転送するスクリプトがあります。

私が抱えている問題は、[email protected]がその時に私に電子メールを送ることがあることです。
転送アドレス以外のすべてのアドレスに転送する必要があるルールを誰かに提案する方法はありますか?Google Appsスクリプト、1つを除くすべてのメールを転送する

function forwardEmails() { 
 
    try { 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var settings = ss.getSheetByName('Settings').getDataRange().getValues(); 
 
    if (settings[1][1] == 'No') 
 
     return; 
 
    if (settings[2][1] == "") 
 
     throw new Error('Please set Forward Email!');  
 
    
 
    var email = PropertiesService.getScriptProperties().getProperty('email'); 
 
    if (!email) 
 
     throw new Error('First authorize script by clicking on menu: Email Forwarder >> Authorize Script');  
 
    var today = (new Date()); 
 
    var applicableRules = validRules(today); 
 
    if (applicableRules) { 
 
     var unread = GmailApp.getInboxUnreadCount(); 
 
     if (!unread) 
 
     return; 
 
     var threads = GmailApp.getInboxThreads(0, unread>100?100:unread); 
 
     var cutOff = today.getTime() - (MINUTES*60*1000 + 100); // 10 mins + 100 ms 
 
    
 
     for (var i=0; i<threads.length; i++) { 
 
     var msgs = threads[i].getMessages();  
 
     for (var j=0; j<msgs.length; j++) {   
 
      var from  = msgs[j].getFrom(); 
 
      var msgDate = msgs[j].getDate(); 
 
      var msgTime = (new Date(msgDate)).getTime(); 
 
      var diff1  = msgTime - cutOff; 
 
    
 
         
 
      if (diff1 > 0 && from.indexOf(email) == -1) {      
 
      var to  = msgs[j].getTo(); 
 
      var subject = msgs[j].getSubject(); 
 
      var attach = msgs[j].getAttachments(); 
 
      var body  = msgs[j].getBody(); 
 
      var plainBody = msgs[j].getPlainBody(); 
 
      var replyTo = msgs[j].getReplyTo();    
 
      
 
      var options = {replyTo: from};  
 
      if (attach.length > 0) 
 
       options.attachment = attach; 
 
      
 

 
      
 
      GmailApp.sendEmail(settings[2][1], subject, plainBody, options ); 
 
      } 
 
     }  
 
     } 
 
    } 
 
    } catch (error) {  
 
    var html = '<p>'+ error + '</p><br><br><a href="'+ss.getUrl()+'">Email Forwarder Rules & Settings</a><p>Line: '+ error.lineNumber + ', Filename: ' + error.fileName + '</p>'; 
 
    if (!email) 
 
     email = Session.getActiveUser().getEmail(); 
 
    MailApp.sendEmail(email, 'Email Forwarder Script Failed!', error + '\n\nEmail Forwarder Rules & Settings URL: ' + ss.getUrl(), {htmlBody: html}); 
 
    } 
 
}

答えて

2

代わりのgetInboxThreads()使用search()を使用して、転送先アドレスから到着したすべての未読メールをスキップします。

getInboxThreadsは、()(検索しながら、あなたの受信トレイ内のスレッドを返します)検索クエリを満たすものを返します。次のクエリは、あなたの受信トレイにメッセージが含まれるが、[email protected]

in:inbox -from:[email protected] 
からのものを除外する含まれます
1

あなたは "forwardEmails" 機能の第二のループのチェックを追加することができます。次のコードは、(私は「[1] [2]の設定」転送メールがで参照されると仮定しています。

for (var i=0; i<threads.length; i++) { 
    var msgs = threads[i].getMessages();  
    for (var j=0; j<msgs.length; j++) {   
     var from  = msgs[j].getFrom(); 
     var msgDate = msgs[j].getDate(); 
     var msgTime = (new Date(msgDate)).getTime(); 
     var diff1  = msgTime - cutOff; 

     // New code 
     if (from === settings[2][1]) { 
     continue; 
     } 
+0

ありがとうございます〜する。スクリプトに投稿したコードを追加しましたが、動作しません。 –

関連する問題