Skip to content

Instantly share code, notes, and snippets.

@zenwerk
Last active March 27, 2017 17:18
Show Gist options
  • Save zenwerk/a3d0add56dea9249794572b10a643f7f to your computer and use it in GitHub Desktop.
Save zenwerk/a3d0add56dea9249794572b10a643f7f to your computer and use it in GitHub Desktop.
go / smtp で添付ファイル付きメール送信
package main
import (
"crypto/tls"
"fmt"
"net/mail"
"net/smtp"
"github.com/scorredoira/email"
)
const (
MAIL_SUBJECT = "mail subject"
MAIL_BODY = "body"
FROM_NAME = "from_name"
FROM_ADDRESS = "from@example.com"
TO_ADDRESS = "to@example.com"
CSV_FILENAME = "test.csv"
)
func buildCSV() string {
return "asdf,fuga,piyo"
}
func sendMail() error {
m := email.NewMessage(MAIL_SUBJECT, MAIL_BODY)
m.From = mail.Address{Name: FROM_NAME, Address: FROM_ADDRESS}
m.To = []string{TO_ADDRESS}
if err := m.AttachBuffer(CSV_FILENAME, []byte(buildCSV()), false); err != nil {
return err
}
auth := smtp.PlainAuth("", "example@gmail.com", "password", "smtp.gmail.com")
tlsconfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: "smtp.gmail.com",
}
conn, err := tls.Dial("tcp", "smtp.gmail.com:465", tlsconfig)
if err != nil {
fmt.Println("tls dial error")
return err
}
c, err := smtp.NewClient(conn, "smtp.gmail.com")
if err != nil {
fmt.Println("smtp client error")
return err
}
if err := c.Auth(auth); err != nil {
fmt.Println("smtp auth error")
return err
}
// To && From
if err = c.Mail("from@example.com"); err != nil {
fmt.Println("smtp from error")
return err
}
if err = c.Rcpt("to@example.com"); err != nil {
fmt.Println("smtp rcpt error")
return err
}
// Data
wd, err := c.Data()
if err != nil {
fmt.Println("smtp data error")
return err
}
_, err = wd.Write(m.Bytes())
if err != nil {
fmt.Println("smtp write error")
return err
}
err = wd.Close()
if err != nil {
fmt.Println("smtp close error")
return err
}
c.Quit()
return nil
}
func main() {
err := sendMail()
if err != nil {
panic(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment