我正在尝试在 Go (Golang) 中发送一封包含电子邮件正文和文件附件(CSV 文件)的电子邮件。我遵循mime多部分消息的标准,但是我不太熟悉遵循该标准的消息的结构。我模糊地遵循一位同事的Python代码片段作为使用Python库email(我认为这是来自标准库)的指南,例如MIMEText和MIMEMultipart.执行以下 Go 代码时,电子邮件正文未显示:这有什么问题吗?如何发送包含该文件附件和电子邮件正文的电子邮件?该函数应返回一个字节切片,用作smtp.SendMail从 Go 标准库调用的参数。请参阅下面的注释,了解收到的电子邮件发生的情况( 和THIS DOES NOT SHOW UP [...])THIS ALSO DOES NOT SHOW UP [...]。func msgWithAttachment(subject, filePath string) ([]byte, error) { // this is the separator used for the various parts of the MIME message structure // identified as "boundary" bPlaceholder := "our-custom-separator" // the message setup of the common/standard initial part mime := bytes.NewBuffer(nil) mime.WriteString(fmt.Sprintf("Subject: %s\r\nMIME-Version: 1.0\r\n", subject)) mime.WriteString(fmt.Sprintf("Content-Type: multipart/mixed; boundary=%s\r\n", bPlaceholder)) // THIS DOES NOT SHOW UP AS THE BODY OF THE EMAIL... // mime.WriteString("\r\n") // mime.WriteString(fmt.Sprintf("--%s\r\n", bPlaceholder)) // mime.WriteString("This should be the email message body (v1)...") // mime.WriteString("\r\n") // THIS ALSO DOES NOT SHOW UP AS THE BODY OF THE EMAIL... // BUT IS NEEDED OTHERWISE THE EMAIL MESSAGE SEEMS TO CONTAIN AS ATTACHMENT THE EMAIL MESSAGE ITSELF // (CONTAINING ITSELF THE REAL ATTACHMENT) mime.WriteString(fmt.Sprintf("--%s\r\n", bPlaceholder)) mime.WriteString("Content-Type: text/plain; charset=utf-8\r\n") mime.WriteString("This should be the email message body (v2)...")}
2 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
巧合的是,前几天我也遇到了类似的问题。我需要在正文内容类型和正文本身的开头之间有一个空行。以下是这部分代码的更新行:
mime.WriteString("Content-Type: text/plain; charset=utf-8\r\n") mime.WriteString("\r\nThis should be the email message body (v2)...")
为了清楚起见,这个换行符 (\r\n) 不必完全位于此处,它可以附加到上面的内容类型行。它只需要在内容类型和正文开头之间看到一个空行。
我假设附件的附加没有问题,对吗?我的假设是,这是因为在添加附件数据之前,内容处置行的末尾有双换行符。
森栏
TA贡献1810条经验 获得超5个赞
阅读 RFC 规范对我有帮助:
请注意,封装边界必须出现在行的开头,即在 CRLF 之后,并且初始 CRLF 被视为封装边界的一部分,而不是前面部分的一部分。边界后面必须紧跟另一个 CRLF 和下一部分的标头字段,或者是两个 CRLF,在这种情况下,下一部分没有标头字段(因此假定为 Content-Type text/清楚的)。
- 2 回答
- 0 关注
- 262 浏览
添加回答
举报
0/150
提交
取消