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

时间:2016-12-13 04:10:49

标签: javascript email canvas go email-attachments

我正在使用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 method ...

mail.Embed(t.Test)

这给了我一张空白图片,错误是文件名或扩展名太长。不确定这是否重要,但请注意我得到的src来自HTML5 Canvas。我从Canvas获得了图像的来源...

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...

如何将此信息发送到我的电子邮箱?到目前为止,文档只能让我知道。

1 个答案:

答案 0 :(得分:2)

首先,检查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正文中添加图片名称时,您必须定义src之类的cid:tux.png 1}}

替代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_base64嵌入图片,如果我们查看示例,则为data:image/png;base64,iVBORw0K...

修改

我使用JSON请求和处理程序Example

创建了一个示例