Отправка электронных писем получателям, если каждому получателю соответствует определенное значение ячейки - PullRequest
0 голосов
/ 11 мая 2019

В основном я использовал Google Sheets для создания трекера счетов, и я хочу отправить электронное письмо с напоминанием каждому из моих клиентов, когда их счет должен быть выставлен. Я уже установил дату и обратный отсчет, и теперь я хочу отправить им письмо с напоминанием, когда значение ячейки достигнет «2», что означает, что прошло 32 дня с тех пор, как я выставил им счет.

Я собрал коды из разных источников в Интернете, а также установил 24-часовой триггер для запуска кода один раз в день. Шаблон электронной почты также на месте. Данные каждого клиента (даты, имена, адреса и т. Д.) Перечислены в отдельных строках.

Моя проблема заключается в том, что вместо отправки одного письма нужному клиенту почтовое приложение отправляет письма всем клиентам, когда у любого из них есть счет-фактура!

Я не уверен, какую функцию или код мне следует использовать. Я попробовал 'Email_Sent', но ничего с этим не получилось!

function CheckMaturity() {
  // Fetch invoice maturity
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('InvoiceTracker').activate();   
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    for (var i = 5;i<=10;i++){
      var invoiceMaturityRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('InvoiceTracker').getRange(i, 13); 
      var invoiceMaturity = invoiceMaturityRange.getValue();
      // Check invoice maturity
        if (invoiceMaturity = 2){
        // Fetch the email address
          SpreadsheetApp.getActiveSpreadsheet().getSheetByName('InvoiceTracker').activate();

          var templateText = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('EmailTemplate').getRange(1,1).getValue();

          var currentAddress = ss.getRange(i, 15).getValue(); 
          var currentInvoiceNo = ss.getRange(i, 3).getValue(); 
          var currentInvoiceDate = ss.getRange(i, 4).getValue(); 
          var currentClient = ss.getRange(i, 14).getValue();
          var messageBody = templateText.replace('{client}',currentClient).replace('{invoiceNo}',currentInvoiceNo).replace('{invoiceDate}', currentInvoiceDate);
          var subjectLine = 'Kind reminder - Invoice status';

          MailApp.sendEmail(currentAddress, subjectLine, messageBody);{
          SpreadsheetApp.getActiveSpreadsheet().toast('Invoice reminder sent to' +currentClient, 'Reminder sent', -1);

          }

       }
    } 
}

Я хочу, чтобы приложение отправляло только одно электронное письмо нужному (соответствующему) клиенту.

1 Ответ

0 голосов
/ 11 мая 2019

Я думаю, вам нужно ниже. Пожалуйста, проверьте переменные и ссылки. Следующий код должен быть скорректирован. Столбец «А» следует заменить на столбец, в котором у вас есть последняя запись, чтобы не пропустить ни одного клиента. Кроме того, пожалуйста, проверьте комментарии в коде ниже.

.Range("A1047854").End(xlUp).Row

И тем самым полный код:

Sub SendEmails()
    Dim myOlApp As Outlook.Application, MailItem As Outlook.MailItem
    Dim attachmentPath1 As String, attachmentPath2 As String
    Set myOlApp = CreateObject("Outlook.Application")

    'loop through a sheet (change index)
    For i = 1 To ThisWorkbook.Sheets("index").Range("A1047854").End(xlUp).Row
        'set key for check (or just do it directly in the if)
        invoiceMaturity = ThisWorkbook.Sheets("index").Range("A" & i).Value
        If invoiceMaturity = "2" Then
            'you can load the variables first, before adding them to the email, or add them directly.
            Name = ""
            MailAddress = ""
            Address = ""
            currentInvoiceNo = ""
            currentInvoiceDate = ""
            currentClient = ""

            'make item for each iteration (again)
            Set MailItem = myOlApp.CreateItem(olMailItem)
            'attachments
            attachmentPath1 = "path/to/file.something" 'or set to ""(nothing)
            'body
            MailItem.HTMLBody = "<B>" & "<h3>" & "DRAFT:" & "</h3>" & "</B>" & "<br>" & _
                "Dear, " & "<br>" & "<br>" & _
                "Please find enclosed a kind reminder.." & "<br>" & "<br>" & _
                "Please note, that.." & "</b>" & "<br>" & "<br>" & _
                "Should you have any questions or comments on the above, please do let us know." & "<br>" & "<br>" & _
                "Kind regards," & "<br>" & "<br>" & _
                "Signature"

            MailItem.to = MailAddress  'adjust email
            MailItem.Subject = "[subject of email" & "a variable?" 'adjust subject
            MailItem.Show 'or mailitem.send

            'just to make sure
            Set MailItem = ""

        End If
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...