Для ссылки на прикрепленное изображение изнутри HTML оно должно иметь Content-Id
, т. Е. В HTML оно должно выглядеть так:
`<img src="cid:000001.png">
Глядя на источник Attach
в "github.com/jordan-wright/email
, который, как я полагаю, вы используете, показывает, что он использует заданное имя файла как Content-Id
:
func (e *Email) Attach(r io.Reader, filename string, c string) (a *Attachment, err error) {
....
at.Header.Set("Content-ID", fmt.Sprintf("<%s>", filename))
Таким образом, убедитесь, что v.FileName
вы Использование в качестве имени для вашего вложения фактически используется как cid
в HTML части.
После того, как к вопросу добавлено больше информации:
.. Единственная информация, которую я имею относительно вложений: имя файла, контент (строка), тип контента (image / png) и атрибут contentDisposition, установленный на inline и cid
В этом случае вы cid
а не имя файла.
С еще большей информацией, добавленной к вопросу:
есть следующее сообщение, которое я получаю в моем обработчике golang:
{"fromDisplayName":"Forg...
Похоже, ваше изображение уже закодировано в base64, но библиотека, которую вы используете doe s дополнительная кодировка base64, поэтому сначала нужно ее декодировать. Также библиотека явно использует Content-Type
из multipart/mixed
, но оно должно быть multipart/related
, чтобы изображения были связаны с HTML.
Следующий код работает для меня с JSON из вашего вопроса хранится как mail.json
. Обратите внимание, что я пропустил проверку ошибок в нескольких местах, чтобы сосредоточиться на решении. И я не отправляю почту напрямую, а храню ее только в виде строки, чтобы сохранить ее в виде файла EML и проверить. Скорее всего, вам нужно изменить Bytes
функцию , чтобы установить multipart/related
непосредственно там:
package main
import (
"github.com/jordan-wright/email"
"encoding/json"
"encoding/base64"
"fmt"
"os"
"bytes"
"strings"
)
type Attachments struct {
Filename string `json:"filename"`
Content string `json:"content"`
ContentType string `json:"contentType"`
ContentDisposition string `json:"contentDisposition"`
Cid string `json:"cid"`
}
type Mail struct {
To []string `json:"to"`
Subject string `json:"subject"`
Body string `json:"body"`
Parts []Attachments `json:"attachments"`
}
func main() {
f,_ := os.Open("mail.json")
d := json.NewDecoder(f)
m := &Mail{}
d.Decode(&m)
// fmt.Println(m)
e := email.NewEmail()
e.To = m.To
e.Subject = m.Subject
e.HTML = []byte(m.Body)
for _,p := range m.Parts {
s,_ := base64.StdEncoding.DecodeString(string(p.Content))
e.Attach(bytes.NewReader(s), p.Cid, p.ContentType)
}
s,_ := e.Bytes()
mail := strings.Replace(string(s),": multipart/mixed;",": multipart/related;",1)
fmt.Println(mail)
}