Как создать черновик сообщения с вложением, используя gmail API в Node.JS? - PullRequest
1 голос
/ 06 января 2020

Я работаю с Gmail API , необходимо создать новый черновик с приложением, я следую официальной документации: https://developers.google.com/gmail/api/v1/reference/users/drafts/create


    let response2 = await gmail.users.drafts.create({
        'userId': 'me',
        'resource': {
            'message': {
                'raw': payload
            }
        }
    });

этот фрагмент создает черновик сообщения в Gmail, , но не может прикрепить файл с моего локального компьютера

Где я могу найти PartId и Parts Array в enter code here прикрепленный файл из локальной

полезной нагрузки Refrence: https://www.any-api.com/googleapis_com/gmail/docs/Definitions/MessagePart

// -- -- payload for post request -- -- //
// ------------------------------------ //
{
  "body": {
    "attachmentId": "",
    "data": "",
    "size": 0
  },
  "filename": "",
  "headers": [
    {
      "name": "",
      "value": ""
    }
  ],
  "mimeType": "",
  "partId": "",
  "parts": [
    {
      "body": {},
      "filename": "",
      "headers": [
        null
      ],
      "mimeType": "",
      "partId": "",
      "parts": [
        null
      ]
    }
  ]
}

1 Ответ

1 голос
/ 07 января 2020

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

Это полное рабочий пример:

Шаг 1:

function makeBody(subject, message, receiverId) {
    var boundary = "__myapp__";
    var nl = "\n";
    var attach = new Buffer(fs.readFileSync(__dirname + "/../" + fileName)).toString("base64");
    // console.dir(attach);
    var str = [

        "MIME-Version: 1.0",
        "Content-Transfer-Encoding: 7bit",
        "to: " + receiverId,
        "subject: " + subject,
        "Content-Type: multipart/alternate; boundary=" + boundary + nl,
        "--" + boundary,
        "Content-Type: text/plain; charset=UTF-8",
        "Content-Transfer-Encoding: 7bit" + nl,
        message + nl,
        "--" + boundary,
        "--" + boundary,
        "Content-Type: Application/pdf; name=myPdf.pdf",
        'Content-Disposition: attachment; filename=myPdf.pdf',
        "Content-Transfer-Encoding: base64" + nl,
        attach,
        "--" + boundary + "--"

    ].join("\n");

    var encodedMail = new Buffer(str).toString("base64").replace(/\+/g, '-').replace(/\//g, '_');
    return encodedMail;
}

Шаг 2:


const auth = await authorize(accessToken);
const gmail = google.gmail({
    version: 'v1',
    auth
});
var rawText = makeBody("This is subject", "This is message", "test@gmail.com");
var res = await gmail.users.drafts.create({
    'userId': 'me',
    'resource': {
        'message': {
            'raw': rawText
        }
    }
});

Также можно используйте этот npm пакет Mimemessage

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