使用golang實現批量發送面試邀請郵件


  最近公司在招app開發人員,每天的簡歷多達上百份,經常需要給十幾個人發郵件,郵件內容基本差不多,就是告訴下對方公司的詳細地址以及乘車路線,不同的就是面試者的姓名,應聘的職位,面試的時間和郵件地址不同,這樣一個個的復制粘貼去發郵件實在是浪費時間,尤其是對於一個程序員來說。既然作為一個程序員,就要有程序員的樣,寫個程序來解決。我想的是把要邀請面試的人員信息放到一個excel里面,通過程序去讀取出來並自動發送郵件,當然這個功能並不難,用c#也很容易就實現了,不過最近正在學些golang,正好拿這個練下手。

  先說發郵件功能,這個有系統自帶的包,引用net/smtp就行,另外網上也有寫的比較完善的例子,拿來用就行。發送郵件的代碼如下

  

package libofm

import (
    "net/smtp"
    "strings"
)

const (
    HOST        = "smtp.****.com"
    SERVER_ADDR = "smtp.****.com:25"
    USER        = "test@****.com" //發送郵件的郵箱
    PASSWORD    = "123456"              //發送郵件郵箱的密碼
)

type Email struct {
    to       string "to"
    subject  string "subject"
    msg      string "msg"
    mailtype string "html"
}

func NewEmail(to, subject, msg, mailtype string) *Email {
    return &Email{to: to, subject: subject, msg: msg, mailtype: mailtype}
}

func SendEmail(email *Email) error {
    auth := smtp.PlainAuth("", USER, PASSWORD, HOST)
    sendTo := strings.Split(email.to, ";")
    done := make(chan error, 1024)
    var content_type string
    if email.mailtype == "html" {
        content_type = "Content-Type: text/" + email.mailtype + "; charset=UTF-8"
    } else {
        content_type = "Content-Type: text/plain" + "; charset=UTF-8"
    }

    go func() {
        defer close(done)
        for _, v := range sendTo {

            str := strings.Replace("From: "+USER+"~To: "+v+"~Subject: "+email.subject+"~"+content_type+"~~", "~", "\r\n", -1) + email.msg

            err := smtp.SendMail(
                SERVER_ADDR,
                auth,
                USER,
                []string{v},
                []byte(str),
            )
            done <- err
        }
    }()

    for i := 0; i < len(sendTo); i++ {
        <-done
    }

    return nil
}

  再來就是要加上讀取excel文件的功能了,好在也早有第三方的包github.com/tealeg/xlsx,引用到項目中來即可。不過在引用之前,要先安裝這個第三方的包才行,因為這個包是在github上面,所以只需要打開命令行窗口,執行go get github.com/tealeg/xlsx就行,當然前提是要裝好了git的,另外需要在系統變量PATH中加入git的執行目錄,例如C:\Program Files\Git\bin。示例代碼如下

package main

import (
    "fmt"
    "github.com/tealeg/xlsx"
)

func main() {
    excelFileName := "/home/tealeg/foo.xlsx" //excel文件路徑
    xlFile, err := xlsx.OpenFile(excelFileName)
    if err != nil {
        ...
    }
    for _, sheet := range xlFile.Sheets {
        for _, row := range sheet.Rows {
            for _, cell := range row.Cells {
                fmt.Printf("%s\n", cell.String())
                //讀取出內容后調用發郵件的代碼即可
            }
        }
    }
}    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM