GoLang:无法发送带附件的电子邮件
php小编草莓今天给大家分享一篇关于GoLang的问题:无法发送带附件的电子邮件。在日常开发中,发送带附件的电子邮件是一个常见需求,但有时候我们会遇到一些问题。本文将介绍如何解决这个问题,帮助大家顺利发送带附件的电子邮件。我们将一步步解析问题的原因,并提供相应的解决方案,希望能帮到大家。
问题内容
我正在尝试使用以下代码发送带有附件的电子邮件:
package mail import ( "bytes" logging "project/logging" "fmt" "log" "mime/multipart" "net/textproto" "gopkg.in/mail.v2" ) func SendWithAttachment(from string, to []string, subject, bodyHTML string, attachmentName string, attachmentData []byte) error { logoURL := "/path/to/cs.jpg" m := mail.NewMessage() m.SetHeader("From", from) m.SetHeader("To", to...) m.SetHeader("Subject", subject) m.Embed(logoURL) // Create a multipart message body := &bytes.Buffer{} writer := multipart.NewWriter(body) // Add HTML part htmlPart := make(textproto.MIMEHeader) htmlPart.Set("Content-Type", "text/html") htmlPart.Set("Content-Transfer-Encoding", "quoted-printable") htmlPartWriter, err := writer.CreatePart(htmlPart) if err != nil { logging.NewDefaultLogger().Errorf("Error creating html part: %s", err) return err } htmlPartWriter.Write([]byte(bodyHTML)) // Add Attachment part attachmentPart := make(textproto.MIMEHeader) attachmentPart.Set("Content-Type", "application/octet-stream") attachmentPart.Set("Content-Transfer-Encoding", "base64") attachmentPart.Set("Content-Disposition", `attachment; filename="`+attachmentName+`"`) attachmentPartWriter, err := writer.CreatePart(attachmentPart) if err != nil { logging.NewDefaultLogger().Errorf("Error creating attachment part: %s", err) return err } attachmentPartWriter.Write(attachmentData) writer.Close() m.SetBody("multipart/mixed", body.String()) fmt.Printf("Sending mail.....") err = gs.dialer.DialAndSend(m) if err != nil { logging.NewDefaultLogger().Errorf("Error sending email..: %s", err) return err } return nil }
正文内容和附件内容均作为附件出现在名为“noname”的文件中。
附件文件内容如下:
--d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9 内容传输编码:引用可打印 内容类型:text/html
... --d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9 内容处置:附件;文件名=“resource_details.csv” 内容传输编码:base64 内容类型:应用程序/八位字节流附件内容..
--d885a04b467ae7d6100eb844c09574a6bdaef0a9796dc6fdde03a90613c9--
解决方法
我能够让它工作:
m := mail.NewMessage() m.SetHeader("From", emailDetails.From) m.SetHeader("To", emailDetails.To...) m.SetHeader("Subject", emailDetails.Subject) if emailDetails.BodyHTML != "" { m.SetBody("text/html", emailDetails.BodyHTML) } else { m.SetBody("text/plain", emailDetails.BodyPlain) } if emailDetails.AttachmentName != "" && len(emailDetails.AttachmentData) > 0 { m.Attach(emailDetails.AttachmentName, mail.SetCopyFunc(func(writer io.Writer) error { _, err := writer.Write(emailDetails.AttachmentData) return err })) }
以上是GoLang:无法发送带附件的电子邮件的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

Go语言中用于浮点数运算的库介绍在Go语言(也称为Golang)中,进行浮点数的加减乘除运算时,如何确保精度是�...

Go爬虫Colly中的Queue线程问题探讨在使用Go语言的Colly爬虫库时,开发者常常会遇到关于线程和请求队列的问题。�...

本文讨论了GO中使用表驱动的测试,该方法使用测试用例表来测试具有多个输入和结果的功能。它突出了诸如提高的可读性,降低重复,可伸缩性,一致性和A

本文讨论了通过go.mod,涵盖规范,更新和冲突解决方案管理GO模块依赖关系。它强调了最佳实践,例如语义版本控制和定期更新。

本文讨论了GO的反思软件包,用于运行时操作代码,对序列化,通用编程等有益。它警告性能成本,例如较慢的执行和更高的内存使用,建议明智的使用和最佳
