我正在使用 Golang 创建一个电子邮件客户端,以发送带有 CSV 文件的电子邮件。一切正常,除了在收到的电子邮件附件中,我可以在文件末尾看到一些不需要的额外字符。
我的代码片段:
import (
"bytes"
"encoding/base64"
"fmt"
"mime/multipart"
"net/smtp"
...
)
func SendEmail(cfg Config) error {
body := bytes.NewBuffer(nil)
body.WriteString(fmt.Sprintf("From: %s\n", cfg.EmailFrom))
body.WriteString(fmt.Sprintf("To: %s\n", cfg.EmailTo))
body.WriteString(fmt.Sprintf("Subject: %s\n", cfg.EmailSubject))
// csv file to attach
fileContents := `column1,column2,column3\nAAA,BBB,CCC\nDDD,EEE,FFF\n`
fileContentBytes := []byte(fileContents)
body.WriteString("MIME-Version: 1.0\n")
writer := multipart.NewWriter(body)
boundary := writer.Boundary()
// attach file
body.WriteString("Content-Type: text/plain\n")
body.WriteString("Content-Transfer-Encoding: base64\n")
body.WriteString(fmt.Sprintf("Content-Disposition: attachment; filename=%s\n", "test-filename"))
encodedBytes := make([]byte, base64.StdEncoding.EncodedLen(len(fileContentBytes)))
base64.StdEncoding.Encode(encodedBytes, fileContentBytes)
body.Write(encodedBytes)
body.WriteString(fmt.Sprintf("\n--%s--", boundary))
err = smtp.SendMail(cfg.EmailSMTPHost+":"+cfg.EmailSMTPPort,
nil, cfg.EmailFrom, []string{cfg.EmailTo}, body.Bytes())
if err != nil {
return errors.Wrap(err, "smtp.SendMail failed")
}
return nil
}
预期的 csv 文件:
column1,column2,column3
AAA,BBB,CCC
DDD,EEE,FFF
获得的csv文件:
column1,column2,column3
AAA,BBB,CCC
DDD,EEE,FFF
5k§xõí»ã}8
文件内容编码有什么问题吗?任何帮助将不胜感激,谢谢!
BIG阳
相关分类