我正在嘗試在 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 關注
- 326 瀏覽
添加回答
舉報
0/150
提交
取消