From 813bd9ebe7ccad11de921c04b7cdb9d7d8196889 Mon Sep 17 00:00:00 2001 From: Bernhard Froehlich Date: Mon, 15 Aug 2022 13:35:12 +0000 Subject: [PATCH] Support .env files if it exists --- README.md | 2 +- config.go | 32 ++++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 23557087..db81740f 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ device which produces mail. ## Main features -* Simple configuration with ini file or environment variables +* Simple configuration with ini file .env file or environment variables * Supports SMTPS/TLS (465), STARTTLS (587) and unencrypted SMTP (25) * Checks for sender, receiver, client IP * Authentication support with file (LOGIN, PLAIN) diff --git a/config.go b/config.go index a188e1f8..b14e0ff0 100644 --- a/config.go +++ b/config.go @@ -47,8 +47,8 @@ var ( remotesStr = flagset.String("remotes", "", "Outgoing SMTP servers") // additional flags - _ = flagset.String("config", "", "Path to config file (ini format)") - versionInfo = flagset.Bool("version", false, "Show version information") + _ = flagset.String("config", "", "Path to config file (ini format)") + versionInfo = flagset.Bool("version", false, "Show version information") // internal listenAddrs = []protoAddr{} @@ -194,14 +194,26 @@ func setupTimeouts() { } func ConfigLoad() { - // configuration parsing - if err := ff.Parse(flagset, os.Args[1:], - ff.WithEnvVarPrefix("smtprelay"), - ff.WithConfigFileFlag("config"), - ff.WithConfigFileParser(IniParser), - ); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) - os.Exit(1) + // use .env file if it exists + if _, err := os.Stat(".env"); err == nil { + if err := ff.Parse(flagset, os.Args[1:], + ff.WithEnvVarPrefix("smtprelay"), + ff.WithConfigFile(".env"), + ff.WithConfigFileParser(ff.EnvParser), + ); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + } else { + // use env variables and smtprelay.ini file + if err := ff.Parse(flagset, os.Args[1:], + ff.WithEnvVarPrefix("smtprelay"), + ff.WithConfigFileFlag("config"), + ff.WithConfigFileParser(IniParser), + ); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } } // Set up logging as soon as possible