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

移动互联刚刚落下尾巴,大数据时代,已经来到眼下,每天某东,某宝的购物,刚刚打开了几个商品,旁边的广告就开始了推送你的喜好,这也太快了,生活就这样被绑架了!不剁手都不行!言归正传,今天了解下邮件推送模块的实现,推荐中的一小撮:但是很实用的,目前。基于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, "123@163.com")
	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":"xxxxxx@qq.com",   //你的邮箱账号
    "password":"123456789",  //授权码
    "name":"yourName",    //用户名
    "mailserver":"smtp.qq.com",  //邮件服务器
    "port":"587"
}

以上即是Go实现的邮件推送模块。

使用这个需要开启我们的POP3/SMTP发送邮件,具体的仅以QQ邮箱为例:
1. 开启邮件服务
设置邮箱

2.获取授权码
获取授权码
3.将授权码等写到配置文件
配置Json
4.发送消息,并查看消息内容
在这里插入图片描述

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值