107 lines
2.3 KiB
Go
107 lines
2.3 KiB
Go
package main
|
||
|
||
import (
|
||
"crypto/tls"
|
||
"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_MAIL := cfg.Section("global").Key("SEND_MAIL").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", "", "接收者邮箱")
|
||
flag.Parse()
|
||
|
||
// 简单设置 log 参数
|
||
log.SetFlags(log.Lshortfile | log.LstdFlags)
|
||
|
||
e := email.NewEmail()
|
||
// 设置 sender 发送方 的邮箱 , 此处可以填写自己的邮箱
|
||
e.From = SEND_MAIL
|
||
|
||
// 设置 receiver 接收方 的邮箱 此处也可以填写自己的邮箱, 就是自己发邮件给自己
|
||
e.To = []string{*To}
|
||
|
||
// 设置主题
|
||
e.Subject = *Subject
|
||
|
||
// 简单设置文件发送的内容,暂时设置成纯文本
|
||
e.Text = []byte(*Text)
|
||
|
||
// 附件
|
||
if is_Attac != nil {
|
||
e.AttachFile(*is_Attac)
|
||
}
|
||
|
||
host_sign := strings.Index(SMTP_SERVER, ":")
|
||
SMTP_SERVER_Host := SMTP_SERVER[0:(len(SMTP_SERVER) - len(SMTP_SERVER[host_sign:]))]
|
||
SMTP_SERVER_Port := SMTP_SERVER[host_sign+1:]
|
||
|
||
auth := smtp.PlainAuth("", SEND_MAIL, MAIL_KEY, SMTP_SERVER_Host)
|
||
|
||
if SMTP_SERVER_Port != "25" {
|
||
fmt.Println("SSL mode")
|
||
err := e.SendWithTLS(SMTP_SERVER, auth, &tls.Config{ServerName: SMTP_SERVER_Host})
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
|
||
} else {
|
||
err := e.Send(SMTP_SERVER, auth)
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
}
|
||
|
||
log.Println("send successfully ... ")
|
||
}
|