Как сделать снимок экрана электронной почты с определенной темой (Gmail) с помощью скрипта Google Apps?

Я пытаюсь получить снимок экрана электронной почты (Gmail) с определенной строкой темы, используя скрипт приложений Google, в Google Таблицы. Я нахожу источник, который может получить скриншоты сайта. Вот пример кода:

var siteUrl = "### URL you want to retrieve a screenshot. ###";
var url ="https://www.googleapis.com/pagespeedonline/v4/runPagespeed?screenshot=true&fields=screenshot&url=" +
encodeURIComponent(siteUrl);
var res = UrlFetchApp.fetch(url).getContentText();
var obj = JSON.parse(res);
var blob = Utilities.newBlob(Utilities.base64DecodeWebSafe(obj.screenshot.data),
  "image/png",
  "sample.png"
);
DriveApp.createFile(blob);

Мы можем получить потоки, используя следующие строки для конкретной темы:

var threads = GmailApp.search('subject:"Daily Report"')
var msgs = GmailApp.getMessagesForThreads(threads);

Но из-за моих навыков новичка я не могу сшить их, чтобы получить скриншот этого письма с конкретной темой. Интересно, есть ли способ обойти это. Любое руководство будет высоко оценено. Спасибо.

Во-первых, я приношу свои извинения за то, что мой пример сценария оказался бесполезен в вашей ситуации. Что касается вашего сценария показа, я обновил его 9 декабря 2021 года. Пожалуйста, будьте осторожны с этим. Но, к сожалению, на текущем этапе скриншот сообщения из Gmail нельзя получить напрямую с помощью «Метода: pagespeedapi.runpagespeed». Потому что URL-адрес сообщения Gmail не может быть общедоступным. Таким образом, в этом случае требуется использовать обходной путь. Но я не могу представить ваш ожидаемый результат get the screenshot of the (Gmail) email. Например, скриншот, который вам нужен, это только тело HTML?

Tanaike 20.11.2022 13:03

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

Roomi 20.11.2022 13:06

Спасибо за ответ. Что касается I just want the screenshot of the interface which we see when we open any email., я думаю, что на текущем этапе это невозможно, потому что URL-адрес сообщения Gmail не может быть общедоступным. Прошу прощения за это.

Tanaike 20.11.2022 13:11

есть ли обходной путь для этого, потому что мы не делимся им публично, мы просто авторизуем скрипт, используя наш личный адрес электронной почты, для которого мы хотим сделать снимок экрана

Roomi 20.11.2022 13:17

Кажется, что когда используется «pagespeedapi.runpagespeed», URL-адрес должен быть общедоступной ссылкой. Но URL-адрес Gmail не является общедоступной ссылкой. Таким образом, когда мой пример сценария используется с URL-адресом сообщения Gmail, извлекается экран входа в систему. Итак, я спросил о моем обходном пути. Но из yes, I just want the screenshot of the interface which we see when we open any email. я понял, что мой обходной путь не подходит для вашей ситуации. Прошу прощения за это.

Tanaike 20.11.2022 13:20

Может быть, мы можем поискать другой API, помимо использования PageSpeed ​​​​API.

Roomi 20.11.2022 13:38

Спасибо за ответ. Например, когда используется обходной путь, какие значения вы хотите включить в электронное письмо в виде изображения?

Tanaike 21.11.2022 01:38
what values do you want to include in the Email as an image?, мы можем включить тему письма и тело письма.
Roomi 21.11.2022 04:02

Спасибо за ответ. Из вашего ответа я предложил обходной путь в качестве ответа. Не могли бы вы подтвердить это? Если это было не полезно, прошу прощения.

Tanaike 21.11.2022 05:44
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
1
9
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите экспортировать сообщение Gmail, используя "pagespeedapi.runpagespeed" со скриптом Google Apps в качестве изображения.

Проблема и обходной путь:

На текущем этапе для использования «pagespeedapi.runpagespeed» требуется использовать общедоступную ссылку сайта. Но, к сожалению, URL сообщения в Gmail не является общедоступной ссылкой. Таким образом, ваша цель не может быть достигнута напрямую с помощью «pagespeedapi.runpagespeed».

Когда я спросил вас о ваших необходимых значениях в электронной почте в виде изображения, вы сказали we can include email subject line, and email body.. Исходя из этого, в этом ответе в качестве обходного пути я хотел бы использовать следующий поток.

  1. Получите тему и тело HTML из сообщения Gmail.
  2. Преобразуйте полученную тему и тело HTML в изображение, используя Charts.newTableChart().

Когда этот поток отражен в образце сценария, он становится следующим.

Пример сценария:

// This is from your showing script.
var threads = GmailApp.search('subject:"Daily Report"');
var msgs = GmailApp.getMessagesForThreads(threads);

// I added the blow script.
var subject = msgs[0][0].getSubject();
var htmlBody = msgs[0][0].getBody();
var imageBlob = Charts.newTableChart().setDataTable(
  Charts.newDataTable()
    .addColumn(Charts.ColumnType.STRING, '')
    .addRow([`<p style="font-size: 150%">Subject: ${subject}</p>`])
    .addRow([htmlBody])
    .build()
)
  .setOption('allowHtml', true)
  .setDimensions(1024, 1024)
  .build().getBlob();

// Here, the retrieved image is created as an image file in the root folder. By this, you can confirm the output image. The filename is "sample.png".
DriveApp.createFile(imageBlob.setName("sample.png"));

Примечание:

  • В этом примере скрипта используется первое сообщение из msgs вашего скрипта.

  • Когда этот скрипт запускается, первое сообщение извлекается из msgs, а тема и тело HTML извлекаются из сообщения. А затем они преобразуются в изображение PNG в виде большого двоичного объекта. Когда вы выводите большой двоичный объект в виде файла изображения, вы можете видеть, что тема и тело HTML отображаются по порядку.

  • В этом образце размер шрифта темы составляет 150%. Пожалуйста, измените это для вашей реальной ситуации.

  • В этом образце размер изображения составляет 1024 x 1024. Пожалуйста, измените это для вашей реальной ситуации.

Использованная литература:

Круто, ты легенда. Он работает по назначению. Большое спасибо еще раз

Roomi 21.11.2022 05:52

@Roomi Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И тебе спасибо.

Tanaike 21.11.2022 06:07

Другие вопросы по теме