推荐系统之Go实现邮件推送

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/AMimiDou_212/article/details/89217685

移动互联刚刚落下尾巴,大数据时代,已经来到眼下,每天某东,某宝的购物,刚刚打开了几个商品,旁边的广告就开始了推送你的喜好,这也太快了,生活就这样被绑架了!不剁手都不行!言归正传,今天了解下邮件推送模块的实现,推荐中的一小撮:但是很实用的,目前。基于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.将授权码等写到配置文件
配置Json
4.发送消息,并查看消息内容
在这里插入图片描述

注:需要的开箱即用的,可以下面留言,私信给你!欢迎讨论学习,吐槽!!!!!

猜你喜欢

转载自blog.csdn.net/AMimiDou_212/article/details/89217685