简介
这篇简短的教程向您展示了如何从安装到发送第一封邮件使用go-mail。
go-mail需要一个工作的Go安装(版本1.16+)。从Go下载页面下载Go。
可以使用Go模块安装机制通过go get
命令安装go-mail。
要安装go-mail的最新版本,请进入您的项目文件夹,然后通过发出以下命令导入模块即可:
1
| $ go get github.com/wneessen/go-mail
|
go-mail由两个主要组件组成。 Msg
表示邮件消息,Client
通过SMTP服务处理邮件传递。
首先,让我们使用NewMsg()
方法创建一个新的Msg
,并分配一个发件人地址和一个收件人地址。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| package main
import (
"github.com/wneessen/go-mail"
"log"
)
func main() {
m := mail.NewMsg()
if err := m.From("toni.sender@example.com"); err != nil {
log.Fatalf("failed to set From address: %s", err)
}
if err := m.To("tina.recipient@example.com"); err != nil {
log.Fatalf("failed to set To address: %s", err)
}
}
|
在这个小代码片段中,首先我们将go-mail导入我们的项目。请参见第4行中的import
语句。接下来,我们在第9行中创建了一个新消息。第10和13行设置了发件人和收件人地址。由于go-mail确保您提供的是有效的邮件地址,因此我们返回一个error
。这样我们就可以确保go-mail接受提供的地址,并且不会在以后引起问题。
接下来,我们要为我们的邮件设置一个主题行,并填充邮件正文内容。
1
2
| m.Subject("This is my first mail with go-mail!")
m.SetBodyString(mail.TypeTextPlain, "Do you like this mail? I certainly do!")
|
SetBodyString()
的第一个参数是我们需要提供的内容类型。在我们的示例中,mail.TypeTextPlain
基本上表示text/plain
内容类型-表示纯文本邮件正文。
现在我们已经准备好发送邮件消息了,让我们将其发送出去。为此,我们将使用Client
,它处理SMTP传输。
1
2
3
4
5
| c, err := mail.NewClient("smtp.example.com", mail.WithPort(25), mail.WithSMTPAuth(mail.SMTPAuthPlain),
mail.WithUsername("my_username"), mail.WithPassword("extremely_secret_pass"))
if err != nil {
log.Fatalf("failed to create mail client: %s", err)
}
|
在此示例中,我们使用主机名smtp.example.com
连接到邮件服务器,并为Client
提供了一些选项,例如我们要连接的端口,我们要使用SMTP PLAIN
进行身份验证以及用户名和密码。
最后,我们告诉客户端交付邮件。
1
2
3
| if err := c.DialAndSend(m); err != nil {
log.Fatalf("failed to send mail: %s", err)
}
|
DialAndSend()
方法负责建立连接并发送邮件。您也可以分别调用它们,但是我们不需要快速示例。
那很简单,不是吗?您成功地准备了一封邮件消息,并通过第三方邮件服务器将其发送给收件人。当然,go-mail可以做更多。查看详细文档以获取所有功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| package main
import (
"github.com/wneessen/go-mail"
"log"
)
func main() {
m := mail.NewMsg()
if err := m.From("toni.sender@example.com"); err != nil {
log.Fatalf("failed to set From address: %s", err)
}
if err := m.To("tina.recipient@example.com"); err != nil {
log.Fatalf("failed to set To address: %s", err)
}
m.Subject("This is my first mail with go-mail!")
m.SetBodyString(mail.TypeTextPlain, "Do you like this mail? I certainly do!")
c, err := mail.NewClient("smtp.example.com", mail.WithPort(25), mail.WithSMTPAuth(mail.SMTPAuthPlain),
mail.WithUsername("my_username"), mail.WithPassword("extremely_secret_pass"))
if err != nil {
log.Fatalf("failed to create mail client: %s", err)
}
if err := c.DialAndSend(m); err != nil {
log.Fatalf("failed to send mail: %s", err)
}
}
|