commit - fcea8dc69f246e04c5304af228295d1be740de3b
commit + 517f0f6252a4398a77ad82c027ecdcc7ba8e3f29
blob - 624cf395311b55505b2460b0a3d3c080c634a919
blob + f379c0d2d23a269b0180391ffc3d79a2c1e07e71
--- config.example.toml
+++ config.example.toml
user = "user"
password = "password"
server = "server"
-port = 25
+port = 587
+starttls = true
blob - 9fc065d8a3530c5181f8e488fed904f404637791
blob + 3ed064590abc78d9aabcaee82fd5db329e1daba4
--- docs/rss-email.1.scd
+++ docs/rss-email.1.scd
*--smtp-user* _user_
SMTP user
+*--smtp-starttls*
+ Enable SMTP STARTTLS
+
If all of these options are given, no configuration file will be read, and thus
no configuration file is necessary. Missing options will be read from the
configuration file.
blob - 6490c3c51b3a1b8cdb5585794e6ade30b0290be3
blob + b4fc365ed7eebce284f9586d601772cd8f853447
--- docs/rss-email.5.scd
+++ docs/rss-email.5.scd
- *password*: String
- *server*: String
- *port*: Int
+- *starttls*: Bool
*user* and *password* define the username and password used to authenticate with
SMTP. *server* and *port* define the server and port of the SMTP server that
-should be used.
+should be used. *starttls* defines whether the server uses STARTTLS or not.
+The attribute *starttls* is optional and defaults to *false*.
+
Note that it is currently not possible to specify a password in any other way
than with the *password* attribute, meaning it has to be saved in plain-text.
user = "user"
password = "password"
server = "server"
-port = 25
+port = 587
+starttls = true
```
# FILES
blob - 104d5f46d08cb482905330ea1282eebb8cfdcee6
blob + a70fa5913c25dc3a66bded36ec4511ba2f890e0c
--- src/cli.rs
+++ src/cli.rs
/// SMTP server port
#[clap(long, value_name = "port", value_parser = clap::value_parser!(u16).range(1..))]
pub smtp_port: Option<u16>,
+ /// Enable SMTP STARTTLS
+ #[clap(long, value_name = "starttls")]
+ pub smtp_starttls: Option<bool>,
}
impl Cli {
blob - 40cbfa995122f513006038b8b4c7d727aa91fbd6
blob + 897732853817e93e172b5ba94464b93b1e005ce7
--- src/config.rs
+++ src/config.rs
pub(crate) password: String,
pub(crate) server: String,
pub(crate) port: u16,
+ pub(crate) starttls: Option<bool>,
}
impl Config {
pub smtp_password: String,
pub smtp_server: String,
pub smtp_port: u16,
+ pub smtp_starttls: bool,
}
impl AppConfig {
cli.smtp_password,
cli.smtp_server,
cli.smtp_port,
+ cli.smtp_starttls,
) {
(
Some(mail_from),
Some(smtp_password),
Some(smtp_server),
Some(smtp_port),
+ Some(smtp_starttls),
) => {
trace!("All necessary config values have been given on the command line, no need to check for config file");
s.mail_from = mail_from;
s.smtp_password = smtp_password;
s.smtp_server = smtp_server;
s.smtp_port = smtp_port;
+ s.smtp_starttls = smtp_starttls;
}
- (mail_from, mail_to, smtp_user, smtp_password, smtp_server, smtp_port) => {
+ (
+ mail_from,
+ mail_to,
+ smtp_user,
+ smtp_password,
+ smtp_server,
+ smtp_port,
+ smtp_starttls,
+ ) => {
let cfg = Config::new(cli.config_path)?;
s.mail_from = mail_from.unwrap_or(cfg.mail.from);
s.mail_to = mail_to.unwrap_or(cfg.mail.to);
s.smtp_password = smtp_password.unwrap_or(cfg.smtp.password);
s.smtp_server = smtp_server.unwrap_or(cfg.smtp.server);
s.smtp_port = smtp_port.unwrap_or(cfg.smtp.port);
+ s.smtp_starttls = smtp_starttls.or(cfg.smtp.starttls).unwrap_or(false);
}
}
blob - 329f8a461200a7009871a4dd49684af78cb25f74
blob + 4e71447e5583ff7d6ea7b8bc25a3ad30fbd60f11
--- src/mail.rs
+++ src/mail.rs
password: String,
server: &str,
port: u16,
+ starttls: bool,
) -> Result<AsyncSmtpTransport<Tokio1Executor>, Error> {
let creds = Credentials::new(user, password);
- let mailer = AsyncSmtpTransport::<Tokio1Executor>::relay(server)
- .context(SMTPSnafu)?
- .credentials(creds)
- .port(port)
- .build();
+ let mailer = if starttls {
+ AsyncSmtpTransport::<Tokio1Executor>::starttls_relay(server)
+ } else {
+ AsyncSmtpTransport::<Tokio1Executor>::relay(server)
+ }
+ .context(SMTPSnafu)?
+ .credentials(creds)
+ .port(port)
+ .build();
Ok(mailer)
}
blob - 4d2cb027064564aeef0b4eb645e702809adb82c2
blob + 74e412950d4074b2b18a24b90b59db88a0a9d388
--- src/main.rs
+++ src/main.rs
config.smtp_password.clone(),
&config.smtp_server,
config.smtp_port,
+ config.smtp_starttls,
)
.context(MailSnafu)?;