Отправить фрагмент байта во встроенное вложение с помощью Mailgun

#go #mailgun

# #Вперед #mailgun

Вопрос:

Я использую пакет Mailgun для Go и хотел бы отправить встроенное изображение с помощью cid. В моем html-шаблоне для mailgun у меня правильная cid:qr-code.png настройка. Однако я должен добавить встроенное вложение в свое электронное письмо с qr-кодом. Я использую этот метод для генерации QR-кода:

 code, err := qrcode.Encode(data, qrcode.Medium, 256) // code is a []byte
 

Теперь мне нужно добавить этот код в мое электронное письмо в качестве встроенного вложения со свойством cid, установленным на qr-code.png

message.AddBufferAttachment("qr-code.png", code) Правильно прикрепляет изображение, но не вставляет его, потому что я не могу установить cid свойство.

Теперь я знаю, что это возможно с помощью mailgun, потому что следующий код в .js может выполнить это с помощью mailgun.

 mg.Attachment({
  data: base64Buffer,
  filename: "qr-code.png",
  cid: "cid:qr-code.png",
}),
 

Кажется, я просто не могу сделать это с пакетом go Mailgun. Примечание: я не могу записать изображение в файл и в ОС, а затем прикрепить его.

Комментарии:

1. Вы пробовали message.AddReaderInline(filename string, readCloser io.ReadCloser) ?

2. @Tyger Да, но я не могу понять, как преобразовать [] байты в io.ReadCloser. bytes.NewReader преобразуется в io.Reader не an io.ReadCloser .

3. Вы можете преобразовать его в io.Reader , а затем в io.ReadCloser , как это ioutil.NopCloser(bytes.NewReader(code))

4. @Tyger Это сработало!! Если вы добавите ответ, я его приму.

5. Звучит неплохо. Обязательно тщательно протестируйте его, я никогда раньше не использовал mailgun

Ответ №1:

Вы можете использовать AddReaderInline функцию

message.AddReaderInline(filename, readCloser)

Поскольку вам нужно преобразовать []bytes в io.ReadCloser , вы можете преобразовать в io.Reader , а затем в io.ReadCloser

ioutil.NopCloser(bytes.NewReader(code))