0%

使用golang发送gmail

最近在搞 linux 自动发邮件的事,之前使用了 smstp 发送 gmail 不过这种方式感觉和我需要的有一点差距,所以打算使用 golang 进行发送邮件。因为 gmail 的 smtp 是必须 TLS 的,所以我在网上查阅了一下资料。发现了一篇不错的代码。然后稍微定制了一下。

参考地址 https://hackernoon.com/golang-sendmail-sending-mail-through-net-smtp-package-5cadbe2670e0

直接上代码

https://github.com/elissa2333/library/blob/master/gmail.go

package gmail

import (
    "crypto/tls"
    "fmt"
    "log"
    "net/smtp"
)

type mail struct {
    user   string
    passwd string
}

func check(err error) {
    if err != nil {
        log.Panic(err)
    }
}

//初始化用户名和密码
func New(u string, p string) mail {
    temp := mail{user: u, passwd: p}
    return temp
}

//标题 文本 目标邮箱
func (m mail) Send(title string, text string, toId string) {
    auth := smtp.PlainAuth("", m.user, m.passwd, "smtp.gmail.com")

    tlsconfig := &tls.Config{
        InsecureSkipVerify: true,
        ServerName:         "smtp.gmail.com",
    }

    conn, err := tls.Dial("tcp", "smtp.gmail.com:465", tlsconfig)
    check(err)

    client, err := smtp.NewClient(conn, "smtp.gmail.com")
    check(err)

    if err = client.Auth(auth); err != nil {
        log.Panic(err)
    }

    if err = client.Mail(m.user); err != nil {
        log.Panic(err)
    }

    if err = client.Rcpt(toId); err != nil {
        log.Panic(err)
    }

    w, err := client.Data()
    check(err)

    msg := fmt.Sprintf("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s", m.user, toId, title, text)

    _, err = w.Write([]byte(msg))
    check(err)

    err = w.Close()
    check(err)

    client.Quit()
}

然后调用它

package main

import(
        "gmail"
)

func main(){
        foo := gmail.New("[email protected]","passwd") //自己的邮箱地址和密码
        foo.Send("标题","邮箱内容","[email protected]") //邮件标题 邮件内容 需要发送到的邮箱地址
}