一尘不染

如何将图像添加到电子邮件的HTML正文(Go)

go

我正在使用Gomail

我正在尝试向自己发送电子邮件。我已经找到了解决方法,但是现在我想在html正文中或作为附件添加图像(没什么关系)。我只需要能够在电子邮件中看到图像即可。

首先,我img src通过POST请求发送,然后将其保存到以下请求中struct

type test_struct struct {
    Test string `json:"image"`
}

然后,我尝试像这样将其附加到电子邮件正文中…

mail := gomail.NewMessage()
mail.SetHeader("From", "XXXX@gmail.com")
mail.SetHeader("To", "XXXX@gmail.com")
mail.SetHeader("Subject", "IMAGE!")

mail.SetBody("text/html", `<img src="cid:t.Test" alt="My Image"/>`)

这不起作用,所以我尝试使用Embed方法

mail.Embed(t.Test)

这给了我空白图像,并出现错误的文件名或扩展名。不知道这是否重要,但请注意,src我来自HTML5Canvas。我从画布上获得图像的来源…

localCanvas.toDataURL('image/png');

这就是我保存的值t.Test

buf, err := ioutil.ReadAll(req.Body)
reader := bytes.NewReader(buf)

var t test_struct

err = json.NewDecoder(reader).Decode(&t)

以格式保存的字符串具有t.Test以下格式…

data:image/png:base64, iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgA...

如何将其发送到我的电子邮件?到目前为止,文档仅使我了解。


阅读 290

收藏
2020-07-02

共1个答案

一尘不染

首先,检查t.Test中的数据是否正确(如果包含文件名,路径或需要引用图像的任何内容)

好吧,您有一些选择,首先,如果仅附加图像就可以了,那么您只应该这样做:

mail.Attach("/path/of/your/image/image.png")

但是,如果您需要在消息中使用图像,则可以使用其他方法。

替代项1:使用Embed方法

您必须在文件系统中具有映像,因为该方法是通过这种方式定义的。您必须执行以下操作:

mail.SetBody("text/html", "Image <img src=\"cid:tux.png\"/>")
mail.Embed("/path/of/your/image/tux.png")

您必须使用图片名称,在这种情况下tux.png,当您使用img标记将其添加到html正文中时,必须定义srclikecid:tux.png

替代2:使用base64编码

为此,您需要知道图像文件的mime类型,在我的示例中为png文件,因此mime为image/png。另外,您必须将图像编码为base64。

img, err := ioutil.ReadFile("/path/of/your/image/tux.png")
if err != nil {
    // check errors
}
out := base64.StdEncoding.EncodeToString(img)

或者,如果文件系统中没有该映像,但将其包含在变量([]byte类型)中,则可以将其与EncodeToString

var imageData []byte
// in some part, you load the image data into imageData
out := base64.StdEncoding.EncodeToString(imageData)

你用它像

mail.SetBody("text/html", fmt.Sprintf("Image <img src=\"data:image/png;base64,%s\"/>", out))

因此,当您使用时,如果使用img,您必须在src嵌入图像中设置data:mime_type;base64,image_encoded_base64data:image/png;base64,iVBORw0K...

编辑:

我创建与JSON请求和处理程序的示例实施例

2020-07-02