会社名やメールアドレス等を一覧化しているExcelを読み込み、読み込んだ内容をもとにテンプレート文書に従ったメール本文を作成する、ということを行ったのでその方法をまとめます。
GoでExcelのデータを読み込む方法は先日別でまとめたので、こちらをご参照ください。
Goでテンプレート文書を使用するには
公式パッケージである、text/template を使用します。
テンプレート文書の作成
まず、テンプレート文書を作成します。
今回、Excelの一覧にある宛先に、年末年始の休業期間のメールを作成するとします。
テンプレート文書は.tmpl
の拡張子で保存します。
テンプレート文書内で、{{.メンバ名}}
の形式で構造体のメンバーを指定することで、動的に値を挿入することが可能となります。
mail.tmpl
件名: 年末年始の休業期間に関するお知らせ
{{.CompanyName}}
{{.Name}} 様
いつもご利用いただきありがとうございます。弊社では、下記の期間を年末年始の休業期間としておりますので、ご了承ください。
休業期間: 2023年12月29日 から 2024年1月5日 まで
上記の期間中は、弊社業務を休業させていただきます。休業期間中にいただいたお問い合わせやご依頼につきましては、休業明けに順次対応させていただきますので、ご了承ください。
何かご不明点や緊急のご連絡がございましたら、下記の連絡先までお気軽にお問い合わせください。
[連絡先]
[会社名]
[電話番号]
[メールアドレス]
お客様にはご迷惑をおかけいたしますが、何卒ご理解とご協力を賜りますようお願い申し上げます。
来る新年が、皆さまにとって幸多き年でありますよう、心よりお祈り申し上げます。
敬具
テンプレート文書の指定箇所に値を挿入する
{{.CompanyName}}
や{{.Name}}
に、Excelの一覧にある値を挿入します。
挿入したメール文章を会社名.txt
のファイルにそれぞれ保存します。
main.go
package main
import (
"fmt"
"text/template"
"os"
"github.com/xuri/excelize/v2"
)
type atesakiType struct {
CompanyName string
Name string
Mail string
}
func main() {
f, err := excelize.OpenFile("./excel/宛先.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// リストが載っているシートすべての行を取得
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
// 構造体リストに格納
var atesakiList []*atesakiType
for index, row := range rows {
// 1行目はヘッダーなので除外
if index < 1 {
continue
}
atesaki := &atesakiType{
CompanyName: row[0],
Name: row[1],
Mail: row[2],
}
atesakiList = append(atesakiList, atesaki)
}
// mail.tmplのテンプレート文書を読み込む
tmpl, err := template.ParseFiles("./template/mail.tmpl")
if err != nil {
fmt.Println(err)
}
for _, atesaki := range atesakiList {
// 保存先のファイルを作成する
fn, err := os.Create(atesaki.CompanyName + ".txt")
if err != nil {
fmt.Println(err)
}
defer fn.Close()
// 値を挿入し、テンプレート文書からメール文章を作成・ファイル保存する
if err = tmpl.Execute(fn, atesaki); err != nil {
fmt.Println(err)
}
}
}
作成したファイルの一例が下記となります。
B株式会社.txt
件名: 年末年始の休業期間に関するお知らせ
B株式会社
山田花子 様
いつもご利用いただきありがとうございます。弊社では、下記の期間を年末年始の休業期間としておりますので、ご了承ください。
休業期間: 2023年12月29日 から 2024年1月5日 まで
上記の期間中は、弊社業務を休業させていただきます。休業期間中にいただいたお問い合わせやご依頼につきましては、休業明けに順次対応させていただきますので、ご了承ください。
何かご不明点や緊急のご連絡がございましたら、下記の連絡先までお気軽にお問い合わせください。
[連絡先]
[会社名]
[電話番号]
[メールアドレス]
お客様にはご迷惑をおかけいたしますが、何卒ご理解とご協力を賜りますようお願い申し上げます。
来る新年が、皆さまにとって幸多き年でありますよう、心よりお祈り申し上げます。
敬具
おわりに
メール本文を一括で作成することができました!
今回はこの作成したメール本文をコピペで送信したんですが、メール送信まで一括で行うプログラムも作成したいと思っています。
また実装できたらまとめていきますので、そのときはよろしくお願いします!