在golang中通过smtp发送电子邮件并更改发件人的姓名

时间:2014-12-02 12:01:05

标签: email go smtp mail-sender

我在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

3 个答案:

答案 0 :(得分:10)

您需要将邮件的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.

并使用sender@example.com中的地址(Client.Mail)。

或者,您可以使用我的包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)
    }
}

答案 1 :(得分:0)

您可以检查jpoehls/gophermail之类的项目是否效果更好。

它有一个测试用例like this one

m.SetFrom("Domain Sender <sender@domain.com>")

内部(main.go)在SetMailAddress()中调用方法mail.ParseAddress() supposed to follow RFC 5322

答案 2 :(得分:0)

我认为您可以使用mail.Address并使用Address.String函数格式地址

func (a *Address) String() string
  

String将地址格式化为有效的RFC 5322地址。如果地址名称包含非ASCII字符,则将根​​据RFC 2047呈现名称。

我写了一些例子:

go_smtp.go