gpt4 book ai didi

go - 通过 Exim(没有 smtp)发送电子邮件?

转载 作者:IT王子 更新时间:2023-10-29 01:48:32 27 4
gpt4 key购买 nike

我目前正在使用“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) //should write entire msg with bcc?

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

密件抄送未到达 exim -t 我如何在不使用 smtp 的情况下实现它。

最佳答案

我认为是 this (here 是它的变更日志条目)。

不过,上面提交修复的逻辑应该只适用于实际发送消息——也就是说,当包实际与 SMTP 对话时服务器(因为自然地,Bcc 不应转发到处理消息的第一个 MTA(甚至可能是第一个 MDA——我懒得阅读 RFC))。

正在讨论的提交是指 this part of a relevant RFC它实际上提供了三种不同的方式来处理 Bcc header 领域。所以我不知道是否真的应该责怪包作者这个改变与否。

然而,this看起来像剥离 Bcc header ,即使对于 Message.WriteTo方法,IMO,这是一个错误。我认为这是一个错误的原因如下:

  • 当包通过 SMTP 发送消息时,它作为 MTA 工作或 MDA,并应遵守相关 RFC 为这些定义的规则邮件代理的类型。
  • 当它只是将消息流式传输到 MDA(在您的例子中是 Exim)时,它作为纯客户端工作,处理 Bcc header 字段显然不是它的事——而是应该委托(delegate)给第一个“真正的”邮件处理代理。

我能找到的唯一相关问题/拉取请求是 this但它看起来像代码在包含后进行了高度重构,所以我不知道它是否引入了我认为是错误的东西。

另见 this .

长话短说

我会在程序包的错误跟踪器中提交问题。

(如果您愿意,请将其链接到此处;谢谢。)

关于go - 通过 Exim(没有 smtp)发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49974478/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com