亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Golang 中附加文件并通過 SMTP 發送時,電子郵件消息沒有正文部分

在 Golang 中附加文件并通過 SMTP 發送時,電子郵件消息沒有正文部分

Go
Qyouu 2023-06-26 15:26:30
我正在嘗試在 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) 不必完全位于此處,它可以附加到上面的內容類型行。它只需要在內容類型和正文開頭之間看到一個空行。

我假設附件的附加沒有問題,對嗎?我的假設是,這是因為在添加附件數據之前,內容處置行的末尾有雙換行符。


查看完整回答
反對 回復 2023-06-26
?
森欄

TA貢獻1810條經驗 獲得超5個贊

閱讀 RFC 規范對我有幫助:

請注意,封裝邊界必須出現在行的開頭,即在 CRLF 之后,并且初始 CRLF 被視為封裝邊界的一部分,而不是前面部分的一部分。邊界后面必須緊跟另一個 CRLF 和下一部分的標頭字段,或者是兩個 CRLF,在這種情況下,下一部分沒有標頭字段(因此假定為 Content-Type text/清楚的)。


查看完整回答
反對 回復 2023-06-26
  • 2 回答
  • 0 關注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號