我正在使用Gomail
我正在尝试向自己发送电子邮件。我已经找到了解决方法,但是现在我想在html正文中或作为附件添加图像(没什么关系)。我只需要能够在电子邮件中看到图像即可。
首先,我img src通过POST请求发送,然后将其保存到以下请求中struct…
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。我从画布上获得图像的来源…
HTML5
localCanvas.toDataURL('image/png');
这就是我保存的值t.Test…
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方法
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
tux.png
cid:tux.png
替代2:使用base64编码
为此,您需要知道图像文件的mime类型,在我的示例中为png文件,因此mime为image/png。另外,您必须将图像编码为base64。
image/png
img, err := ioutil.ReadFile("/path/of/your/image/tux.png") if err != nil { // check errors } out := base64.StdEncoding.EncodeToString(img)
或者,如果文件系统中没有该映像,但将其包含在变量([]byte类型)中,则可以将其与EncodeToString
[]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...
data:mime_type;base64,image_encoded_base64
data:image/png;base64,iVBORw0K...
编辑:
我创建与JSON请求和处理程序的示例实施例