如何将图像添加到电子邮件的 html 正文(前往)
How to add image to html body of an email (Go)
我正在使用 Gomail
我正在尝试向自己发送电子邮件。我已经想出如何做到这一点,但现在我想在 html 正文中或作为附件添加图像(并不重要)。我只需要能够在我的电子邮件中看到图像。
首先,我通过 POST
请求发送 img
src
,然后将其保存到以下 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...
如何将此发送到我的电子邮箱?文档只能让我到目前为止。
首先,检查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
选项 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
创建了一个示例
我正在使用 Gomail
我正在尝试向自己发送电子邮件。我已经想出如何做到这一点,但现在我想在 html 正文中或作为附件添加图像(并不重要)。我只需要能够在我的电子邮件中看到图像。
首先,我通过 POST
请求发送 img
src
,然后将其保存到以下 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...
如何将此发送到我的电子邮箱?文档只能让我到目前为止。
首先,检查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
选项 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
创建了一个示例