Golang 使用gomail包发送邮件

Golang 使用gomail包发送邮件

Gomail

Gomail 是一个简单、高效的发送电子邮件包,它经过良好的测试和记录。
Gomail 只能使用 SMTP 服务器发送电子邮件,但是 API 比较灵活的,很容易实现其他方法使用本地 Postfix、API 等发送电子邮件。
项目地址: https://github.com/go-gomail/gomail

文档:https://godoc.org/gopkg.in/gomail.v2

示例:https://godoc.org/gopkg.in/gomail.v2#example-package

特性

Gomail 支持:

  • 附件
  • 嵌入图像
  • HTML 和文本模板
  • 特殊字符的自动编码
  • SSL 和 TLS
  • 使用相同的 SMTP 连接发送多封电子邮件

使用

下载gomail

go get gopkg.in/gomail.v2

使用代码

import (
    "bytes"
    "fmt"
    "gopkg.in/gomail.v2"
    "html/template"
    "strings"
    "time"
)
const XXX_MAIL_TEMPLATE = `
    <div>
        <h3>123</h3>
        <p>3456</p>
        <h3>789</h2>
        <table style="border-collapse:collapse;border: 1px solid black;">
            <thead style="border-collapse:collapse;border: 1px solid black;">
                <tr style="border-collapse:collapse;border: 1px solid black;text-align: center;">
                    <th style="border-collapse:collapse;border: 1px solid black;">Case Name</th>
                    <th style="border-collapse:collapse;border: 1px solid black;">Owner</th>
                    <th style="border-collapse:collapse;border: 1px solid black;">Creator</th>
                    <th style="border-collapse:collapse;border: 1px solid black;">Status</th>
                </tr>
            </thead>
            <tbody>
            {{with .Job}}
{{range $k, $v := .Cases}}
                <tr style="border-collapse:collapse;border: 1px solid black;text-align: center;">
                    <td style="border-collapse:collapse;border: 1px solid black;">{{$v.Name}}         </td>
                    <td style="border-collapse:collapse;border: 1px solid black;">{{$v.IsSuccess}}          </td>
                    <td style="border-collapse:collapse;border: 1px solid black;">{{$v.Agent}}               </td>

                </tr>
             {{end}}
             {{end}}
            </tbody>
        </table>

    </div>`
func main() {
    temp := PageInfo{Job: &job}
    MAIL_TEMPLATE := XXX_MAIL_TEMPLATE
    m := gomail.NewMessage()
    m.SetHeader("From", "1123123123@qq.com")
    m.SetHeader("To", strings.Split(temp.Emails, ",")...))//send email to multipul persons
    m.SetHeader("Subject", "Hello!")
    t, err := template.New("mail summary template").Parse(MAIL_TEMPLATE)
    if err != nil {
        return
    }
    buffer := new(bytes.Buffer)
    t.Execute(buffer, temp)
    m.SetBody("text/html", buffer.String())
    d := gomail.Dialer{Host: "smtp.qq.com", Port: 465, Username: "1123123123@qq.com", Password: "ocozlhmwsvxhbidd",SSL:true}
    if err := d.DialAndSend(m); err != nil {
        return
    }
    return 
}

运行,发送成功之后,就能收到邮件了。
这里写图片描述

常用邮箱

列举一些常用的邮箱,可以用来测试:

QQ 邮箱
POP3 服务器地址:qq.com(端口:995)
SMTP 服务器地址:smtp.qq.com(端口:465/587)

163 邮箱:
POP3 服务器地址:pop.163.com(端口:110)
SMTP 服务器地址:smtp.163.com(端口:25)

126 邮箱:
POP3 服务器地址:pop.126.com(端口:110)
SMTP 服务器地址:smtp.126.com(端口:25)

开启服务

出于邮箱安全的考虑,很多邮箱缺省是关闭 POP3/SMTP 服务的,需要登录邮箱设置后开启。

以 QQ 邮箱为例,进入邮箱“设置”,在“帐户”项里就可找到“POP3/SMTP服务”的设置项,进行开启。
这里写图片描述
温馨提示:登录第三方客户端时,密码框请输入“授权码”进行验证。

也就是说,在使用 QQ 邮箱发送邮件的时候,需要使用授权码,而不是 QQ 密码!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用golang下载gmail邮件附件的示例代码: ```go package main import ( "encoding/base64" "fmt" "io" "log" "net/mail" "net/smtp" "os" "path/filepath" "strings" "github.com/joho/godotenv" "golang.org/x/net/context" "golang.org/x/oauth2" "golang.org/x/oauth2/google" "google.golang.org/api/gmail/v1" ) func main() { // 加载.env环境变量文件 err := godotenv.Load() if err != nil { log.Fatalf("Error loading .env file: %v", err) } // 获取OAuth2访问令牌 ctx := context.Background() config, err := google.ConfigFromJSON([]byte(os.Getenv("GOOGLE_CLIENT_SECRET")), gmail.GmailReadonlyScope) if err != nil { log.Fatalf("Unable to parse client secret file to config: %v", err) } token := &oauth2.Token{ AccessToken: os.Getenv("GOOGLE_ACCESS_TOKEN"), RefreshToken: os.Getenv("GOOGLE_REFRESH_TOKEN"), TokenType: "Bearer", Expiry: oauth2.Now(), } client := config.Client(ctx, token) // 创建Gmail服务 srv, err := gmail.New(client) if err != nil { log.Fatalf("Unable to retrieve Gmail client: %v", err) } // 获取最新的10封邮件 user := "me" r, err := srv.Users.Messages.List(user).MaxResults(10).Q("is:unread").Do() if err != nil { log.Fatalf("Unable to retrieve messages: %v", err) } // 下载每个邮件的附件 for _, m := range r.Messages { msg, err := srv.Users.Messages.Get(user, m.Id).Do() if err != nil { log.Fatalf("Unable to retrieve message %v: %v", m.Id, err) } // 解析邮件头部 h := msg.Payload.Headers var subject, from, date string for _, v := range h { switch v.Name { case "Subject": subject = v.Value case "From": from = v.Value case "Date": date = v.Value } } // 下载附件 for _, p := range msg.Payload.Parts { if p.Filename != "" { part := p.Body data, err := base64.URLEncoding.DecodeString(part.Data) if err != nil { log.Fatalf("Unable to decode attachment %v: %v", p.Filename, err) } // 将附件保存到本地 ext := filepath.Ext(p.Filename) filename := fmt.Sprintf("%s_%s%s", strings.ReplaceAll(from, "@", "_"), subject, ext) f, err := os.Create(filename) if err != nil { log.Fatalf("Unable to create file %v: %v", filename, err) } defer f.Close() _, err = io.Copy(f, strings.NewReader(string(data))) if err != nil { log.Fatalf("Unable to save file %v: %v", filename, err) } log.Printf("Attachment saved: %v", filename) } } } } ``` 在上面的代码中,首先加载.env文件,该文件含Google应用程序凭据和OAuth2访问令牌。 然后使用OAuth2访问令牌创建Gmail客户端,并使用该客户端获取最新的10封未读邮件。 对于每个邮件,我们获取其详细信息,邮件头部和附件。然后,我们使用base64解码附件数据,并将其保存到本地文件中。文件名采用发送方的电子邮件地址、主题和附件扩展名的组合。 最后,我们在控制台输出“Attachment saved: filename”以指示附件已成功保存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值