Как я могу передать файл из Gmail, используя скрипт приложения, отправив POSTing на удаленный сервер - PullRequest
0 голосов
/ 20 мая 2019

Я использую сценарии приложений Google, чтобы написать несколько дополнений для связи gmail (или электронной почты g suite) с нашей системой crm. Моя текущая проблема - попытка передать выбранное вложение, POST, в скрипт php на удаленном сервере, который воссоздает файл (и отправляется оттуда для интеграции в наш crm).

Ниже приведена подробная информация о коде и т. Д., Хотя, по сути, файл явно не передается правильно, поэтому что-то не так в том, как файл принимается или сохраняется локально. Размер файла другой, и он не открывается. Так, например, я выбираю PDF в электронном письме размером 640 КБ, и полученный файл, созданный на моем сервере, имеет размер более 1 МБ

.

Я настроил свой сценарий с картой, которая включает в себя список вложений. Кнопка на карте пытается отправить содержимое файла на удаленный сервер, где принимающий скрипт PHP просто сохраняет его как локальный файл.

  1. Получение списка вложений для создания переключателей:

    var attachmenttosave = CardService.newSelectionInput().setType(CardService.SelectionInputType.RADIO_BUTTON).setTitle("Selected Attachment").setFieldName("attachmenttosave"); for(var i = 0; i < attachments.length; i++) { var attachment=attachments[i]; attachmenttosave.addItem(attachment.getName(),i,false); }

  2. код, который получает вложение и POST для удаленного сервера:

    var accessToken = e.messageMetadata.accessToken;
    var accessToken = e.messageMetadata.accessToken;
    GmailApp.setCurrentMessageAccessToken(accessToken);
    var messageId = e.messageMetadata.messageId;
    var message = GmailApp.getMessageById(messageId);
    var atc=e['formInput'].attachmenttosave;
    var attachments=message.getAttachments(); 
    var fn=attachments[parseInt(atc)].getName();            
    var blob=attachments[parseInt(atc)].getAs(attachments[parseInt(atc)].getContentType());
    var url="https://remote.server";

    var payload={"typ":"GS_SaveAttachmentToCase","email":encodeURIComponent(user),"fn":encodeURIComponent(fn), 'att':(blob)};
    var options={"method":"POST","payload":payload,"followRedirects":true,"muteHttpExceptions":true};
    var result=UrlFetchApp.fetch(url, options);  
    var data = result.getContentText();    
    return CardService.newActionResponseBuilder().setNotification(CardService.newNotification().setText(data).setType(CardService.NotificationType.INFO)).build();
  1. Получение скрипта PHP:

`

function GS_SaveAttachmentToCase(){
$fn=urldecode($_POST['fn']);
$fp = fopen("GS/" .$fn, "w+");
fwrite($fp, (utf8_decode ($_POST['att'])));
fclose($fp);
echo "done";
}

`

1 Ответ

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

хорошо провел еще несколько исследований и решил эту проблему.

  1. получите содержимое вложения, используя

blob=attachments[parseInt(atc)].getBytes();

в принимающем скрипте php

fwrite($fp, (base64_decode ($_POST['att'])));

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