package main import ( "flag" "fmt" "log" "net/smtp" "os" "path/filepath" "strings" "github.com/jordan-wright/email" "gopkg.in/ini.v1" ) func GetCurrentDirectory() string { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) //返回绝对路径 filepath.Dir(os.Args[0])去除最后一个元素的路径 if err != nil { log.Fatal(err) } return strings.Replace(dir, "\\", "/", -1) //将\替换成/ } func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func main() { // 判断配置文件是否存在 INIFILE := GetCurrentDirectory() + "/" + "gomail.ini" b, _ := PathExists(INIFILE) if !b { INIFILE = "/etc/gomail.ini" } // 读取配置文件 cfg, inierr := ini.Load(INIFILE) if inierr != nil { fmt.Printf("Fail to read file: %v", inierr) os.Exit(1) } SEND_QQ := cfg.Section("global").Key("SEND_QQ").String() MAIL_KEY := cfg.Section("global").Key("MAIL_KEY").String() SMTP_SERVER := cfg.Section("global").Key("SMTP_SERVER").String() Text := flag.String("t", "", "文本") Subject := flag.String("s", "", "主题") is_Attac := flag.String("a", "", "是否添加附件") To := flag.String("r", "", "接收者QQ") flag.Parse() // 简单设置 log 参数 log.SetFlags(log.Lshortfile | log.LstdFlags) e := email.NewEmail() // 设置 sender 发送方 的邮箱 , 此处可以填写自己的邮箱 e.From = SEND_QQ // 设置 receiver 接收方 的邮箱 此处也可以填写自己的邮箱, 就是自己发邮件给自己 e.To = []string{*To} // 设置主题 e.Subject = *Subject // 简单设置文件发送的内容,暂时设置成纯文本 e.Text = []byte(*Text) // 附件 if is_Attac != nil { e.AttachFile(*is_Attac) } //设置服务器相关的配置 err := e.Send(SMTP_SERVER, smtp.PlainAuth("", SEND_QQ, MAIL_KEY, "smtp.qq.com")) if err != nil { log.Fatal(err) } log.Println("send successfully ... ") }