Commit Diff


commit - d8e36cdaa791572f8e9abe232e1b7dbedc60ac91
commit + 7802c66670c94fb7c8d7add4760facc9cc532087
blob - f0758f37b05c45fe7aa8e87c34f6145281fd2dd5
blob + 22aa2eeb384ea1a21c61a4ac615f9becc65dd2ef
--- src/main.rs
+++ src/main.rs
@@ -70,6 +70,7 @@ fn main() -> anyhow::Result<()> {
     embedded_migrations::run(&conn)?;
 
     for u in urls {
+        debug!("Fetching feed from {u:?}");
         let new = rss::fetch_new(u)?;
         for i in new.items() {
             let _ = db::insert_item(&conn, i)?;
@@ -78,8 +79,8 @@ fn main() -> anyhow::Result<()> {
 
     let results = posts
         .filter(sent.eq(false))
-        .limit(5)
         .order(pub_date.desc())
+        .limit(5)
         .load::<models::Post>(&conn)?;
 
     send_posts(&config, results, args.dry_run)?;
@@ -92,6 +93,7 @@ fn send_posts(config: &Config, items: Vec<models::Post
         if !dry_run {
             let subject = post.title.unwrap_or_else(|| "No title found".to_string());
             // TODO: always append url instead
+            // https://todo.sr.ht/~witcher/rss-email/7
             let body = post.content.unwrap_or_else(|| post.url.unwrap());
             send_email(config, subject, body)?;
         }
@@ -106,7 +108,17 @@ where
     S: AsRef<str>,
     I: Into<String>,
 {
-    use lettre::{transport::smtp::authentication::Credentials, Message, SmtpTransport, Transport};
+    use lettre::{
+        message::Message,
+        transport::{
+            smtp::{
+                authentication::Credentials,
+                client::{Tls, TlsParameters},
+                SmtpTransport,
+            },
+            Transport,
+        },
+    };
 
     let email = Message::builder()
         .from(config.from.parse()?)
@@ -118,11 +130,20 @@ where
         config.smtp.user.to_string(),
         config.smtp.password.to_string(),
     );
-    // TODO: allow TLS, specify via config?
-    let mailer = SmtpTransport::builder_dangerous(config.smtp.server)
-        .port(config.smtp.port)
+
+    let tls = TlsParameters::builder(config.smtp.server.to_string())
+        .dangerous_accept_invalid_certs(true)
+        .build()?;
+
+    let mailer = SmtpTransport::relay(config.smtp.server)?
+        .tls(Tls::Opportunistic(tls))
         .credentials(creds)
         .build();
+
+    // TODO: extract mailer to only be constructed once and reused
+    // https://todo.sr.ht/~witcher/rss-email/9
+    // TODO: allow TLS, specify via config?
+    // https://todo.sr.ht/~witcher/rss-email/8
     mailer.send(&email)?;
 
     Ok(())