title: Google Apps Script - Send Email based on date in cell
body: <p>I've looked around and have bits and pieces but can't put the puzzle together.  I'm attempting to create a script that will run on a trigger configured to run daily.  The trigger will be setup under Resources option in the editor.</p>
  
  <p>Basically I'm looking for the script to capture a range of cells, identify a due date, which will be populated in a column, match it to the current date.  If it matches then send a email.  I've started with the send a email from spreadsheet tutorial at Google.  I've added in a if statement to check for the date but I'm losing it on the comparsion to dataRange.  Anyone might help correct these or point me to in direction to research.</p>
  
  <p>The script appears to run but nothing happens, which I believe is because "if (currentTime == dataRange)"  The dataRange is not matching correctly??</p>
  
  <p>Here is the code:</p>
  
  <pre><code>function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 50;   // Number of rows to process
  // Fetch the range of cells
  var dataRange = sheet.getRange(startRow, 1, numRows, 2)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();   
  //Get todays date     
  var currentTime = new Date();
  var month = currentTime.getMonth() + 1;
  var day = currentTime.getDate();
  var year = currentTime.getFullYear();      
  //Test column  for date due &amp; match to current date
      if ( currentTime == dataRange) {
    for (i in data) {
  var row = data[i];
  var emailAddress = row[0];  // First column
  var message = row[1];       // Second column
  var subject = "Task Item Due";
  MailApp.sendEmail(emailAddress, subject, message);
  
  }
  }
  }
  </code></pre>
  
  <p>I'm updating the suggestion provided by Srik and providing his  suggestion in the below code.  I've attempted to post this a couple time so I'm not sure why its not making past peer review?</p>
  
  <pre><code> function sendEmail() {
  
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 50;   // Number of rows to process
  
  var dataRange = sheet.getRange(startRow, 1, numRows, 50);
  
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  //Browser.msgBox(data)
  
  for (i in data) {
  var row = data[i];
  var date = new Date();
  var sheetDate = new Date(row[1]);
  
  if (date.getDate() == sheetDate.getDate() &amp;&amp; date.getMonth() == sheetDate.getMonth() &amp;&amp; date.getFullYear() == sheetDate.getFullYear());
  {
    var emailAddress = row[0];  // First column
    var message = row[2];       // Second column
    var subject = "Sending emails from a Spreadsheet";
    MailApp.sendEmail(emailAddress, subject, message);
   // Browser.msgBox(emailAddress)
  
  }
  
  }
  
  }
  </code></pre>
  
  <p>The code appears to run but I'm getting the following error w/in the script editor.  "Failed to send email: no recipient (line 23)".  But it still sends emails.  It should compare the dates and only send the email if the date matches.  Its sending an email for every row.  I've shared out the spreadsheet to see the code and how the spreadsheet is setup.  <a href="https://docs.google.com/spreadsheet/ccc?key=0AiB8MImvI1UMdGx0WTRsUmVHSjl1dVNPTkxtWlNmcGc" rel="noreferrer">Shared Spreadsheet</a></p>
  
  <p>UPDATED CODE W/ SERGE HELP on the logger and Utilities.formatDate..  Thanks!!</p>
  
  <pre><code>function sendEmail() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow()-1;   // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  //Logger.log(data)
  
  for (i in data) {
    var row = data[i];
    var date = new Date();
    date.setHours(0);
    date.setMinutes(0);
    date.setSeconds(0);
    //Logger.log(date);
    var sheetDate = new Date(row[2]);
   //Logger.log(sheetDate);
   var Sdate = Utilities.formatDate(date,'GMT+0200','yyyy:MM:dd')
   var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
       Logger.log(Sdate+' =? '+SsheetDate)
          if (Sdate == SsheetDate){
            var emailAddress = row[0];  // First column
            var message = row[1];       // Second column
            var subject = "Your assigned task is due today." +message;
            MailApp.sendEmail(emailAddress, subject, message);
            //Logger.log('SENT :'+emailAddress+'  '+subject+'  '+message)
              }    
     }
    }
  </code></pre>