我目前正在使用“gopkg.in/gomail.v2”发送以下code found here
的电子邮件package main
import (
"bytes"
"fmt"
"gopkg.in/gomail.v2"
)
func main() {
m := gomail.NewMessage()
m.SetHeader("From", "me@example.com")
m.SetHeader("To", "you@example.com")
m.SetAddressHeader("Bcc", "youbcc@example.com", "Bcc Email")
m.SetHeader("Bcc", "anotherbcc@example.com", "yetbcc@example.com")
m.SetHeader("Reply-To", "me@example.com")
m.SetHeader("Subject", "Subject is to gomail to be discussed")
body := `Why is bcc not getting populated`
m.SetBody("text/html", body)
sendMailViaExim(m)
}
func sendMailViaExim(m *gomail.Message) (err error) {
cmd := exec.Command("/usr/sbin/exim", "-t")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
pw, err := cmd.StdinPipe()
if err != nil {
log.Println(err)
return
}
err = cmd.Start()
if err != nil {
log.Println(err)
return
}
var errs [3]error
_, errs[0] = m.WriteTo(pw)
errs[1] = pw.Close()
errs[2] = cmd.Wait()
for _, err = range errs {
if err != nil {
log.Println(err)
return
}
}
return
}
以上代码不会发送到密件抄送电子邮件;
所以我通过以下代码记录了传递给exim -t
的信息:
buf:= new(bytes.Buffer)
m.WriteTo(buf)//应该用bcc编写整个msg吗?
fmt.Println(buf.String())
并且控制台已记录:
$ go run main.go
Mime-Version: 1.0
Date: Mon, 23 Apr 2018 11:15:54 +0530
To: you@example.com
Reply-To: me@example.com
Subject: Subject is to gomail to be discussed
From: me@example.com
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Why is bcc not getting populated
bcc没有进入exim -t
如何在不使用smtp的情况下实现这一目标。
答案 0 :(得分:1)
但是,上面提交修复的逻辑应该只适用于实际
发送消息 - 也就是说,当包实际上与SMTP通话时
服务器(因为,Bcc
当然不应该通过处理消息的第一个MTA转发(甚至可能是第一个MDA-I懒惰地阅读RFC)。
正在讨论的提交是指
this part of a relevant RFC实际上提供了三种处理Bcc
标头的方法
领域。
所以我不知道是否真的责怪包裹作者
这种变化与否。
然而,即使Bcc
,this看起来像是剥离Message.WriteTo
标题
方法,IMO,这是一个错误。
我认为这是一个错误的原因如下:
Bcc
标头字段的处理
显然不是它的业务 - 它应该被委托给第一个
"实"邮件处理代理。我能找到的唯一相关问题/拉动请求是 this但它看起来像 代码在包含后被高度重构,所以我不知道 它是否引入了我认为的错误。
另见this。
<强> TL; DR 强>
我会在软件包的bug跟踪器中提出问题。
(如果你愿意的话,请把它链接到那里;谢谢。)
答案 1 :(得分:-2)
问题是由传递给exim的-t
选项引起的。来自the docs:
7。密件抄送:标题行
如果使用 -t 选项调用了Exim,则会从以下地址获取收件人地址 邮件的标题,它将删除可能存在的所有 Bcc:标题行 (提取其地址后)。如果命令上没有 -t 行,则不会删除任何现有的 Bcc:。
。