go-mail
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

简介

这篇简短的教程向您展示了如何从安装到发送第一封邮件使用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行中创建了一个新消息。第1013行设置了发件人和收件人地址。由于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)
	}
}