Скрипты Google Отказанные письма - PullRequest
0 голосов
/ 04 августа 2020

Следующая ссылка на stackoverflow ( Google Scripts - Захват адреса электронной почты из возвращенного сообщения и синтаксический анализ ) дала очень хорошую информацию о том, как бороться с Bounces с помощью скрипта от Амита Агарвала (https://www.labnol.org/internet/gmail-bounced-email-report/29209/).

У меня вопрос, можно ли программно вызывать код? Я тщетно пытался поместить каждый из фрагментов кода в функции и вызывать их.

function RunReport() {
    const findBouncedEmails_ = () => {
        try {
            const rows = [];
            const {
                messages = []
            } = Gmail.Users.Messages.list("me", {
                q: "from:mailer-daemon",
                maxResults: 200
            });
            if (messages.length === 0) {
                toast_("No bounced emails found in your mailbox!");
                return;
            }
            toast_("Working..");
            for (let m = 0; m < messages.length; m += 1) {
                const bounceData = parseMessage_(messages[m].id);
                if (bounceData) {
                    rows.push(bounceData);
                }
                if (rows.length % 10 === 0) {
                    toast_(`${rows.length} bounced emails found so far..`);
                }
            }
            writeBouncedEmails_(rows);
        } catch (error) {
            toast_(error.toString());
        }
    };
}

Я также пытался скопировать код в свой проект, и строки с «const» показывают синтаксические ошибки и не удалось сохранить код в листе.

После ввода от { ссылка } сделал код, как показано ниже, который будет собирать дату, тему и адрес электронной почты возвращенного электронного письма и сохранять данные в лист Google. Разместите это, чтобы помочь другим.

function getBouncedEmails() {

// Create a sheet in your project "BouncedEmails" and add this code in the script.
var sheet = SpreadsheetApp.getActive().getSheetByName('BouncedEmails');

// Fetch all the bounced emails using a query
var query = "from:(mailer-daemon@google.com OR mailer-daemon@googlemail.com)";

//Get the most recent 500 bounced email messages
//Change the number according to your requirement
GmailApp.search(query, 0, 500).forEach(function(thread) {
    thread.getMessages().forEach(function(message) {
        if (message.getFrom().indexOf("mailer-daemon") !== -1) {
          //get the emailAddress from the Header
          var emailAddress = message.getHeader('X-Failed-Recipients');
          //add a filter if you would like to write certain messages only
          if(thread.getFirstMessageSubject() == "YOUR SUBJECT"){
                    // Save the data in Google Spreadsheet
                    sheet.appendRow([
                        thread.getLastMessageDate(),
                        thread.getFirstMessageSubject(),
                        emailAddress]);
          }
        }
    });
 });
}

При первом запуске вам необходимо предоставить разрешение на доступ к соответствующему ящику электронной почты Gmail. Всего наилучшего в кодировании.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Один из способов вызвать код "программно":

function RunReport(){
  findBouncedEmails_();
}

В любом случае, код в вопросе хорош, но требует использования новой среды выполнения скрипта Google Apps, V8, потому что он использует

  1. Стрелочные функции
  2. Шаблонные строки
  3. let и const
0 голосов
/ 04 августа 2020

Вы объявляете функцию «findBouncedEmails_» внутри функции «RunReport()».

И ...

Подождите ...

Вы никогда не звоните ему. (из предоставленного вами кода).

Решение:

Если функция, которую вы хотите «вызвать программно», называется «RunReport», то один из способов сделать это - написать этот оператор:

findBouncedEmails_();

после объявления функции.

Примечание:

Необязательно объявлять findBouncedEmails_ внутри RunReport.

Обновление:

Как указывает @ Rubén, синтаксис, который редактор принимает как действительный, зависит от времени выполнения скрипта, и вы можете увидеть несовместимость синтаксисов в несовместимости .

...