Как отправить изображения в виде вложений с помощью Mailgun и Node.js? - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь отправить изображения в виде вложений к электронным письмам, но мне сложно понять, как это сделать.

Я использую Mailgun для отправки почты, Cloudinary для загрузки изображений, MongoDB в качестве базы данных и Node.js / Express в качестве моего бэкенда.

Пользовательский процесс выглядит так:

  • Пользователь отправляет фотографии на сайт
  • Изображения загружаются через Cloudinary, а прямая ссылка на каждое изображение сохраняется в базе данных MongoDB
  • Почта отправляется через Mailgun для информирования пользователей о новом сообщении со ссылками на изображения в теле

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

Я посмотрел документацию для Mailgun, но не похоже, чтобы нелокальные изображения можно было отправлять в виде вложений. Я что-то упускаю?

Я попытался использовать параметры «inline» и «attachment» для Mailgun, но в итоге получаю сообщение об ошибке, указывающее, что файл / каталог не может быть найден.

var pictures = [];
        post.images.forEach(function(photos){
            pictures.push(photos + " ");
            return pictures;
        });

var attch = new mailgun.Attachment({data: pictures[0], filename: "picture"});
        var data = {
            from: "email <email@email.com>",
            to: "email@email.com",
            subject: 'this is an email',
            html: 'here is a new post and here are the images in that post',
            attachment: attch
        };

Ожидаемый результат - электронное письмо с прикрепленными изображениями нового сообщения или, в данном случае, одно изображение из этого сообщения.

Фактический результат - это сообщение об ошибке:

events.js:183
  throw er; // Unhandled 'error' event
  ^

Error: ENOENT: no such file or directory, stat 'https://res.cloudinary.com/user/image/upload/image.jpg '

1 Ответ

0 голосов
/ 19 января 2019

mailgun.js пакет примет вложение в качестве пути к файлу, буфера и потока. Чтобы прикрепить изображение с внешнего URL-адреса, используйте поток

var request = require('request');
var image = request(pictures[0]);
var data = {
    from: "email <email@email.com>",
    to: "email@email.com",
    subject: 'this is an email',
    html: 'here is a new post and here are the images in that post',
    attachment: image
};

Вот пример кода из mailgun.js

var request = require('request');
var file = request("https://www.google.ca/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png");

var data = {
  from: 'Excited User <me@samples.mailgun.org>',
  to: 'serobnic@mail.ru',
  subject: 'Hello',
  text: 'Testing some Mailgun awesomeness!',
  attachment: file
};

mailgun.messages().send(data, function (error, body) {
  console.log(body);
});

Ссылка: https://www.npmjs.com/package/mailgun-js#attachments

...