first commit
This commit is contained in:
119
cmd/main.go
Normal file
119
cmd/main.go
Normal file
@ -0,0 +1,119 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"qmail/internal/config"
|
||||
"qmail/internal/mail"
|
||||
|
||||
"github.com/jessevdk/go-flags"
|
||||
"github.com/olekukonko/tablewriter"
|
||||
)
|
||||
|
||||
type appOptions struct {
|
||||
Config string `short:"c" long:"config" description:"Config file"`
|
||||
|
||||
Server string `short:"s" long:"server" description:"SMTP server for sending"`
|
||||
PrintList bool `short:"l" long:"list" description:"Print servers"`
|
||||
|
||||
From string `long:"from" description:"e-mail address indicated as sender"`
|
||||
To []string `long:"to" description:""`
|
||||
}
|
||||
|
||||
type helpOptions struct {
|
||||
PrintHelp bool `short:"h" long:"help" description:"Show this help message"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
appOpt := appOptions{
|
||||
Config: config.DefaultConfigPath,
|
||||
}
|
||||
|
||||
f := flags.NewParser(&appOpt, flags.PassDoubleDash)
|
||||
f.Usage = "[OPTIONS] [FILE]"
|
||||
f.LongDescription = "The qmail utility is a tool designed for simple, fast, and convenient email sending"
|
||||
|
||||
helpOpt := helpOptions{}
|
||||
|
||||
f.AddGroup("Help options", "", &helpOpt)
|
||||
|
||||
args, err := f.ParseArgs(os.Args)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
if helpOpt.PrintHelp {
|
||||
f.WriteHelp(os.Stderr)
|
||||
return
|
||||
}
|
||||
|
||||
cfg, err := config.LoadConfig(appOpt.Config)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
if appOpt.PrintList {
|
||||
table := tablewriter.NewWriter(os.Stdout)
|
||||
|
||||
table.SetHeader([]string{"Name", "Host", "Port", "TLS", "Login"})
|
||||
|
||||
for _, s := range cfg.Servers {
|
||||
login := ""
|
||||
|
||||
if s.Auth != nil {
|
||||
login = s.Auth.Login
|
||||
}
|
||||
|
||||
useTLS := "-"
|
||||
if s.UseTLS {
|
||||
useTLS = "+"
|
||||
}
|
||||
|
||||
table.Append([]string{
|
||||
s.Name,
|
||||
s.Host,
|
||||
fmt.Sprintf("%d", s.Port),
|
||||
useTLS,
|
||||
login,
|
||||
})
|
||||
}
|
||||
|
||||
table.Render()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
if appOpt.Server != "" {
|
||||
var server *config.Server
|
||||
|
||||
for _, s := range cfg.Servers {
|
||||
if s.Name == appOpt.Server {
|
||||
server = &s
|
||||
}
|
||||
}
|
||||
|
||||
if server == nil {
|
||||
panic("omg")
|
||||
}
|
||||
|
||||
var bodyFile string
|
||||
|
||||
if len(args) > 1 {
|
||||
bodyFile = args[1]
|
||||
} else {
|
||||
bodyFile = "/dev/stdin"
|
||||
}
|
||||
|
||||
body, err := os.ReadFile(bodyFile)
|
||||
if err != nil {
|
||||
panic("qq")
|
||||
}
|
||||
|
||||
err = mail.SendMail(server, appOpt.From, appOpt.To, body)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user