通过 smtp 发送电子邮件并更改发件人姓名
Posted
技术标签:
【中文标题】通过 smtp 发送电子邮件并更改发件人姓名【英文标题】:Send e-mail over smtp and change the sender's name 【发布时间】:2015-01-30 16:07:48 【问题描述】:我在 golang 中通过 smtp 发送电子邮件,效果很好。要设置电子邮件的发件人,我使用Client.Mail 函数:
func (c *Client) Mail(from string) error
当收件人收到电子邮件时,他将发件人视为明文电子邮件地址:sender@example.com
我希望发件人显示为:Sandy Sender <sender@example.com>
。
这可能吗?我尝试将发件人设置为Sandy Sender <sender@example.com>
或仅Sandy Sender
,但它们都不起作用。我收到错误501 5.1.7 Invalid address
【问题讨论】:
【参考方案1】:您可以检查像jpoehls/gophermail
这样的项目是否效果更好。
它有一个测试用例like this one:
m.SetFrom("Domain Sender <sender@domain.com>")
它在内部 (main.go
) 调用 SetMailAddress()
方法 mail.ParseAddress()
即 supposed to follow RFC 5322。
【讨论】:
【参考方案2】:我认为您可以使用mail.Address 并使用Address.String 函数格式化地址
func (a *Address) String() string
字符串将地址格式化为有效的 RFC 5322 地址。如果地址名称包含非 ASCII 字符,则名称将根据 RFC 2047 呈现。
我写了例子:
go_smtp.go
【讨论】:
【参考方案3】:您需要将邮件的From
字段设置为Sandy Sender <sender@example.com>
:
...
From: Sandy Sender <sender@example.com>
To: recipient@example.com
Subject: Hello!
This is the body of the message.
并且只使用Client.Mail
中的地址(sender@example.com
)。
或者,你可以使用我的包Gomail:
package main
import (
"gopkg.in/gomail.v2"
)
func main()
m := gomail.NewMessage()
m.SetAddressHeader("From", "sender@example.com", "Sandy Sender")
m.SetAddressHeader("To", "recipient@example.com")
m.SetHeader("Subject", "Hello!")
m.SetBody("text/plain", "This is the body of the message.")
d := gomail.NewPlainDialer("smtp.example.com", 587, "user", "123456")
if err := d.DialAndSend(m); err != nil
panic(err)
【讨论】:
所以我可以通过一个 smtp 连接发送多封电子邮件? 您可以使用 Gomail v2(仍然不稳定):github.com/go-gomail/gomail/issues/10#issuecomment-122090752 @codingrogue Gomail v2 现已推出,支持使用单个 SMTP 连接发送多封电子邮件。查看时事通讯示例:godoc.org/gopkg.in/gomail.v2#example-package--Newsletter【参考方案4】:您可以在邮件标题中添加"From: EmailName<" + EmailAdderss + "> \r\n"
以显示您想要的任何电子邮件名称,并添加电子邮件地址以使重复邮件无效。
【讨论】:
另外,与其他答案相比,有点低级...... 是的,它只用于 smtp 包。不使用任何其他包。不过还是谢谢以上是关于通过 smtp 发送电子邮件并更改发件人姓名的主要内容,如果未能解决你的问题,请参考以下文章
SMTP 的哪些实现通常处理邮件数据以响应 DATA 之后的 RSET?
使用 gmail SMTP 发送电子邮件,“发件人”字段重要吗?我需要先设置帐户权限吗?
PHPMailer 使用 SMTP 身份验证发送电子邮件,但 Gmail 仍然声称它无法验证发件人
使用c#发送电子邮件SMTP服务器需要安全连接或客户端未通过身份验证[重复]