Skip to content

Instantly share code, notes, and snippets.

@atomaths
Forked from suapapa/spam.go
Last active December 16, 2015 08:59
Show Gist options
  • Save atomaths/5409475 to your computer and use it in GitHub Desktop.
Save atomaths/5409475 to your computer and use it in GitHub Desktop.
package main
import (
"flag"
"fmt"
"io/ioutil"
"net/smtp"
"os"
)
const (
FROM = "[email protected]"
)
var (
mailTemplate = flag.String("f", "", "전송할 메일 템플릿")
toEmail = flag.String("to", "", "받을 이메일 주소")
)
func main() {
flag.Parse()
if *mailTemplate == "" || *toEmail == "" {
flag.PrintDefaults()
return
}
subject := "테스트 메일"
content, _ := ioutil.ReadFile(*mailTemplate)
// Set up authentication information.
auth := smtp.PlainAuth(
"",
FROM,
os.Getenv("GMAIL_PASSWD"),
"smtp.gmail.com",
)
mime := "MIME-version: 1.0;\r\nContent-Type: text/html; charset=\"UTF-8\";\r\n\r\n"
msg := "Subject: " + subject + "\r\n" + mime + string(content)
err := smtp.SendMail(
"smtp.gmail.com:587",
auth,
FROM,
[]string{*toEmail},
[]byte(msg),
)
if err != nil {
panic(err)
}
fmt.Println("Sent!!")
}
package main
import (
"encoding/csv"
"log"
"net/smtp"
"os"
)
func main() {
subj := "[GDG Korea Golang] 고 언어 미니 컨퍼런스에 잊지 말고 참석해 주세요"
cont := `님 안녕하세요.
고 언어 미니컨퍼러스에 참가 신청을 해 주셔서 감사합니다.\n"
참가 선정이 되셨습니다.
* 시간: 2013년 4월 20일 (토요일)
* 장소: CNN THE BIZ 강남센터
구글 캘린더를 사용하신다면,
아래 이벤트 링크를 통해 시간과 장소를
쉽게 개인 달력에 등록 하실 수 있습니다.
https://plus.google.com/events/cgeohki6hci7ea4e30o43mevp7g
행사에 대해 궁금하신 점은 답 메일로 물어보시거나,
GDG Korea Golang 커뮤니티에 편하게 남겨 주시기 바랍니다.
https://plus.google.com/communities/115721275599816202991
그럼, 컨퍼런스 당일에 뵙겠습니다.
감사합니다.
`
// Set up authentication information.
auth := smtp.PlainAuth(
"",
os.Getenv("GMAIL_ACCOUNT"),
os.Getenv("GMAIL_PASSWD"),
"smtp.gmail.com",
)
for p := range ReceiptanceIter() {
log.Println("Sending to", p.Name, "...")
fc := "Subject: " + subj + "\r\n\r\n" + p.Name + cont
/* fmt.Println(fc) */
err := smtp.SendMail(
"smtp.gmail.com:587",
auth,
os.Getenv("GMAIL_ACCOUNT"),
[]string{p.Email},
[]byte(fc),
)
if err != nil {
log.Fatal(err)
}
}
}
type Receiptance struct {
Name, Email string
}
func ReceiptanceIter() chan *Receiptance {
r, err := os.Open("gdg.csv")
if err != nil {
log.Fatal(err)
}
defer r.Close()
csvR := csv.NewReader(r)
if err != nil {
log.Fatal(err)
}
items, err := csvR.ReadAll()
if err != nil {
log.Fatal(err)
}
items = items[1:]
rC := make(chan *Receiptance)
go func() {
for _, i := range items {
rC <- &Receiptance{
Name: i[1],
Email: i[2],
}
}
close(rC)
}()
return rC
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment