go如何發送郵件

 寫在前面:

 本人從去年開始負責公司go項目,所以還在不斷學習總結中,如果某些地方解釋不對,請大佬多多批評,一定虛心接受並學習改正.

     昨天,我用java寫了一個定時發送郵件的功能,因爲本人目前在公司負責java和go的項目,所以,一般java實現的功能,我本人都喜歡換語言來實現一遍,一是爲了比較他們的不同之處,二是防止手生,多寫代碼,畢竟是有好處的,下面我就將我自己寫的關於go實現郵件發送功能的demo 記錄下來,主要是在前兩天搭建的(iris+gorm)中來寫的,所以需要先搭建一個這個框架,或者直接使用main方法來測試)

一: 在models中建立一個mail的結構體

package models



type Email struct {
	FormEmail        *string           //發件人郵箱
	Password         *string           //授權碼,不是密碼哦
	Host             *string           // 地址
	ToEmail          *string           //收件人郵箱
	EmailData        *string           //郵件內容
	EmailTopic       *string          //主題
	EmailHeader      *string         //郵件標題頭
}

二: 建立一個發送郵件的controller 

package controllers

import (
	"github.com/kataras/iris/context"
	"iris_demo/models"
	"iris_demo/service"
)

type MailController struct {
	Service service.MailService
}
func NewMailController() *MailController {
	return &MailController{Service:service.NewMailService()}
}


//發送郵件
func (m MailController)PostSendEmail(ctx context.Context) (str string ,er error){
	mail := new(models.Email)
	ctx.ReadForm(mail)
	err := m.Service.PostSendEmail(*mail)
	if err != nil {
		return  "",err
	}
	return *mail.FormEmail+"發送"+*mail.ToEmail+"的郵件發送成功",nil
}

三: 建立一個發送郵件的service,寫短信發送的相關功能

package service

import (
	"iris_demo/models"
	"net/smtp"
	"strings"
)

type MailService interface {
	PostSendEmail(mail models.Email)error
}


type mailService struct {}

func NewMailService() MailService{
	return &mailService{}
}

func(m *mailService)PostSendEmail(mail models.Email)error{
	auth := smtp.PlainAuth("", *mail.FormEmail, *mail.Password, *mail.Host)
	split := strings.Split(*mail.ToEmail, ",") //此處寫可以多個郵箱逗號隔開
	to := split
	emailHeader := *mail.EmailHeader
	user := *mail.FormEmail
	subject := *mail.EmailTopic
	contentType := "Content-Type: text/plain; charset=UTF-8"
	body := *mail.EmailData
	msg := []byte("To: " + strings.Join(to, ",") + "\r\nFrom: " + emailHeader +
		"<" + user + ">\r\nSubject: " + subject + "\r\n" + contentType + "\r\n\r\n" + body)
	err := smtp.SendMail("smtp.qq.com:25", auth, user, to, msg)
	if err != nil {
		return err
	}
	return nil
}

四: 在我們的路由設置的地方增加一個新的路由

package route

import (
"github.com/kataras/iris"
"github.com/kataras/iris/mvc"
"iris_demo/controllers"
)

func InitRouter(app *iris.Application) {
	bathUrl := "/api"
	mvc.New(app.Party(bathUrl +"/user")).Handle(controllers.NewUserController())
	mvc.New(app.Party(bathUrl +"/mail")).Handle(controllers.NewMailController())
}

五:postman測試

返回結果顯示發送到兩個郵箱成功,然後我們去郵箱看一下.可以發現兩個郵箱全部成功

qq郵箱

163郵箱 

 

到此,功能全部實現了,下一節我在加一個定時任務來發送,有問題討論請發送郵件到 [email protected] 互相學習.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章