版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
移动互联刚刚落下尾巴,大数据时代,已经来到眼下,每天某东,某宝的购物,刚刚打开了几个商品,旁边的广告就开始了推送你的喜好,这也太快了,生活就这样被绑架了!不剁手都不行!言归正传,今天了解下邮件推送模块的实现,推荐中的一小撮:但是很实用的,目前。基于Go写了个Demo,稍作修改就可以随意发邮件,好了走起。
接下来分享一下Go实现qq邮箱发送邮件功能,其他的参数只需要稍作修改配置文件即可实现不同邮件服务器发送邮件。
项目结构:
mailqq.go
package main
import (
"bytes"
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"log"
"net/smtp"
"os"
"strings"
)
type Config struct {
Email string `json:"email"` //账号
Name string `json:"name"` //发送者名字
Password string `json:"password"` //邮箱授权码
Mailserver string `json:"mailserver"` //邮件服务器
Port string `json:"port"` //服务器端口
}
// 发送邮件信息
type Msg struct {
Tmail string
Title string
Content string
}
func main() {
// 加载配置文件,登录至邮箱
config := LoadConfig("./config.json")
// fmt.Println(config)
flag.Usage = flagUsage
to := flag.String("To", config.Email, "[email protected]")
title := flag.String("title", config.Name, "你好")
content := flag.String("content", "心情很好", "今天心情很好")
flag.Parse()
msg := &Msg{
Tmail: *to,
Title: *title,
Content: *content,
}
if *to != "" && *title != "" && *content != "" {
SendMail(config, msg)
// fmt.Printf("%v\n %v \n %v \n", *to, *title, *content)
} else {
panic("to,title,content can't be null!")
}
}
// 加载配置文件
func LoadConfig(configPath string) (config *Config) {
// 读取配置文件
data, err := ioutil.ReadFile(configPath)
if err != nil {
log.Fatal(err)
}
// 初始化用户信息
config = &Config{}
err = json.Unmarshal(data, &config)
if err != nil {
log.Fatal(err)
}
return config
}
func SendMail(config *Config, ms *Msg) {
auth := smtp.PlainAuth("", config.Email, config.Password, config.Mailserver)
to := []string{ms.Tmail} //接收用户
user := config.Email
nickname := config.Name
subject := ms.Title
content_type := "Content-Type: text/plain; charset=UTF-8"
body := ms.Content
msg := "To:" + strings.Join(to, ",") + "\r\nFrom: "
msg += nickname + "<" + user + ">\r\nSubject: " + subject
msg += "\r\n" + content_type + "\r\n\r\n" + body
server := func(serverName, port string) string {
var buffer bytes.Buffer
buffer.WriteString(serverName)
buffer.WriteString(":")
buffer.WriteString(port)
return buffer.String()
}(config.Mailserver, config.Port)
// 发送邮件
err := smtp.SendMail(server, auth, user, to, []byte(msg))
if err != nil {
fmt.Printf("send mail error:%v\n", err)
}
// fmt.Println(server)
fmt.Println(msg, "\n")
// fmt.Printf("%v\n", auth)
}
func flagUsage() {
usageText := `Usage mailTo [OPTION]
Usage parameter:
-To default: yourself
-title default: yourName
-content default: Hello`
fmt.Fprintf(os.Stderr, "%s\n", usageText)
}
config.json配置文件
{
"email":"[email protected]", //你的邮箱账号
"password":"123456789", //授权码
"name":"yourName", //用户名
"mailserver":"smtp.qq.com", //邮件服务器
"port":"587"
}
以上即是Go实现的邮件推送模块。
使用这个需要开启我们的POP3/SMTP发送邮件,具体的仅以QQ邮箱为例:
1. 开启邮件服务
2.获取授权码
3.将授权码等写到配置文件
4.发送消息,并查看消息内容
注:需要的开箱即用的,可以下面留言,私信给你!欢迎讨论学习,吐槽!!!!!