zoukankan      html  css  js  c++  java
  • go发送邮件

    1.项目中需要把脚本附件发送给同事邮箱,找了好久

    1、安装 gomail 包:
    go get -v gopkg.in/gomail.v2
    
    2、完整代码:
    package main
    
    import (
        "fmt"
        "gopkg.in/gomail.v2"
        "mime"
    )
    
    /*
    go邮件发送
    */
    
    func SendMail(mailTo []string, subject string, body string) error {
        // 设置邮箱主体
        mailConn := map[string]string{
            "user": "xxx@qq.com",  //发送人邮箱(邮箱以自己的为准)
            "pass": "xxx",         //发送人邮箱的密码,现在可能会需要邮箱 开启授权密码后在pass填写授权码
            "host": "smtp.qq.com", //邮箱服务器(此时用的是qq邮箱)
        }
    
        m := gomail.NewMessage(
            //发送文本时设置编码,防止乱码。 如果txt文本设置了之后还是乱码,那可以将原txt文本在保存时
            //就选择utf-8格式保存
            gomail.SetEncoding(gomail.Base64),
        )
        m.SetHeader("From", m.FormatAddress(mailConn["user"], "LLL")) // 添加别名
        m.SetHeader("To", mailTo...)                                  // 发送给用户(可以多个)
        m.SetHeader("Subject", subject)                               // 设置邮件主题
        m.SetBody("text/html", body)                                  // 设置邮件正文
    
        //一个文件(加入发送一个 txt 文件):/tmp/foo.txt,我需要将这个文件以邮件附件的方式进行发送,同时指定附件名为:附件.txt
        //同时解决了文件名乱码问题
        name := "附件.txt"
        m.Attach("E:/GoCode/src/goMail/gomail.txt",
            gomail.Rename(name), //重命名
            gomail.SetHeader(map[string][]string{
                "Content-Disposition": []string{
                    fmt.Sprintf(`attachment; filename="%s"`, mime.QEncoding.Encode("UTF-8", name)),
                },
            }),
        )
    
        /*
            创建SMTP客户端,连接到远程的邮件服务器,需要指定服务器地址、端口号、用户名、密码,如果端口号为465的话,
            自动开启SSL,这个时候需要指定TLSConfig
        */
        d := gomail.NewDialer(mailConn["host"], 465, mailConn["user"], mailConn["pass"]) // 设置邮件正文
        //d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
        err := d.DialAndSend(m)
        return err
    }
    
    func main() {
        // 邮件接收方
        mailTo := []string{
            //可以是多个接收人
            "xxx@163.com",
            "xxx@qq.com",
        }
    
        subject := "Hello World!" // 邮件主题
        body := "测试发送邮件"          // 邮件正文
    
        err := SendMail(mailTo, subject, body)
        if err != nil {
            fmt.Println("Send fail! - ", err)
            return
        }
        fmt.Println("Send successfully!")
    }
    

    3.遇到的问题go get 下载的包不能用

    https://www.jb51.net/article/208264.htm

    整理如下

    #打开 Go modules,如果你担心影响到其他项目可以把这一项值写为auto
    go env -w GO111MODULE=on
    #设置 GOPROXY
    go env -w GOPROXY=https://goproxy.cn,direct
    找到你项目的根目录执行
    go mod init
    之后运行你的项目就会将依赖包自动下载下来了,go.mod中会自动生成依赖代码
    

    4.如果邮件正文需要是整个文件内容,代码如下

    package main
    
    import (
            "bufio"
            "crypto/tls"
            "fmt"
            "gopkg.in/gomail.v2"
            "io"
            "mime"
            "os"
    )
    
    /*
    go邮件发送*/
    
    func SendMail(mailTo []string, subject string, body string) error {
            // 设置邮箱主体
            mailConn := map[string]string{
                    "user": "xxxxi@163.com",  //发送人邮箱(邮箱以自己的为准)
                    "pass": "xxxxx",         //发送人邮箱的密码,现在可能会需要邮箱 开启授权密码后在pass填写授权码
                    "host": "smtp.163.com", //邮箱服务器(此时用的是qq邮箱)
            }
    
            m := gomail.NewMessage(
                    //发送文本时设置编码,防止乱码。 如果txt文本设置了之后还是乱码,那可以将原txt文本在保存时
                    //就选择utf-8格式保存
                    gomail.SetEncoding(gomail.Base64),
            )
            m.SetHeader("From", m.FormatAddress(mailConn["user"], "ks~123")) // 添加别名
            m.SetHeader("To", mailTo...)                                  // 发送给用户(可以多个)
            m.SetHeader("Subject", subject)                               // 设置邮件主题
            //m.SetBody("text/html", body)                                  // 设置邮件正文
            m.SetBody("text/plain", body)                                  // 设置邮件正文
    
            //一个文件(加入发送一个 txt 文件):/tmp/foo.txt,我需要将这个文件以邮件附件的方式进行发送,同时指定附件名为:附件.txt
            //同时解决了文件名乱码问题
            name := "附件.txt"
            m.Attach("/home/scribe/test",
                    gomail.Rename(name), //重命名
                    gomail.SetHeader(map[string][]string{
                            "Content-Disposition": []string{
                                    fmt.Sprintf(`attachment; filename="%s"`, mime.QEncoding.Encode("UTF-8", name)),
                            },
                    }),
            )
    
            /*
               创建SMTP客户端,连接到远程的邮件服务器,需要指定服务器地址、端口号、用户名、密码,如果端口号为465的话,
               自动开启SSL,这个时候需要指定TLSConfig
            */
            d := gomail.NewDialer(mailConn["host"], 25, mailConn["user"], mailConn["pass"]) // 设置邮件正文
            d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
            err := d.DialAndSend(m)
            return err
    }
    
    //go去读文件内容
    func ReadAll(filePth string) string{
            file, err := os.Open(filePth)
            defer file.Close()
            var a string
            if nil == err {
                    buff := bufio.NewReader(file)
                    for {
                            line, err := buff.ReadString('\n')
                            if err == io.EOF {
                                    break
                            }
                            //a = a + line + "\n"
                            a = a + line
                    }
    
            }
            return a
    }
    
    
    func main() {
            // 邮件接收方
            mailTo := []string{
                    //可以是多个接收人
                    "xxxx@qq.com",
                    "xxxx@qq.com",
    
            }
    
            subject := "testtest" // 邮件主题
            //body := "testtest"          // 邮件正文
            body := ReadAll("/home/scribe/test")
    
            err := SendMail(mailTo, subject, body)
            if err != nil {
                    fmt.Println("Send fail! - ", err)
                    return
            }
            fmt.Println("Send successfully!")
    }
    

      

     

      

  • 相关阅读:
    crm 4 注释与上传附件权限
    动态图片轮播
    PHP 连接 MSSQL
    php mssql 中文各种乱码
    百度地图逆地址解析
    Microsoft Visual C++ 2015 Redistributable(x64)
    服务器 vps 空间
    Python之路【第二篇】:Python基础(二)
    Python之路【第一篇】:Python简介和入门
    2016年会成为Java EE微服务年吗?
  • 原文地址:https://www.cnblogs.com/zhaojingyu/p/15544952.html
Copyright © 2011-2022 走看看