public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Lukas Wagner <l.wagner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH proxmox 6/6] notify: sendmail: code style improvements
Date: Mon, 24 Jun 2024 14:31:34 +0200	[thread overview]
Message-ID: <20240624123134.321417-6-l.wagner@proxmox.com> (raw)
In-Reply-To: <20240624123134.321417-1-l.wagner@proxmox.com>

No functional changes intended.

Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
 proxmox-notify/src/endpoints/sendmail.rs | 57 +++++++++++-------------
 1 file changed, 25 insertions(+), 32 deletions(-)

diff --git a/proxmox-notify/src/endpoints/sendmail.rs b/proxmox-notify/src/endpoints/sendmail.rs
index c28d9211..42b2d3a8 100644
--- a/proxmox-notify/src/endpoints/sendmail.rs
+++ b/proxmox-notify/src/endpoints/sendmail.rs
@@ -185,7 +185,7 @@ fn sendmail(
     let now = proxmox_time::epoch_i64();
     let body = format_mail(mailto, mailfrom, author, subject, text, html, now)?;
 
-    let mut sendmail_process = match Command::new("/usr/sbin/sendmail")
+    let mut sendmail_process = Command::new("/usr/sbin/sendmail")
         .arg("-B")
         .arg("8BITMIME")
         .arg("-f")
@@ -194,32 +194,18 @@ fn sendmail(
         .args(mailto)
         .stdin(Stdio::piped())
         .spawn()
-    {
-        Err(err) => {
-            return Err(Error::Generic(format!(
-                "could not spawn sendmail process: {err}"
-            )))
-        }
-        Ok(process) => process,
-    };
+        .map_err(|err| Error::Generic(format!("could not spawn sendmail process: {err}")))?;
 
-    if let Err(err) = sendmail_process
+    sendmail_process
         .stdin
         .take()
-        .unwrap()
+        .expect("stdin already taken")
         .write_all(body.as_bytes())
-    {
-        return Err(Error::Generic(format!(
-            "couldn't write to sendmail stdin: {err}"
-        )));
-    };
-
-    // wait() closes stdin of the child
-    if let Err(err) = sendmail_process.wait() {
-        return Err(Error::Generic(format!(
-            "sendmail did not exit successfully: {err}"
-        )));
-    }
+        .map_err(|err| Error::Generic(format!("couldn't write to sendmail stdin: {err}")))?;
+
+    sendmail_process
+        .wait()
+        .map_err(|err| Error::Generic(format!("sendmail did not exit successfully: {err}")))?;
 
     Ok(())
 }
@@ -236,39 +222,46 @@ fn format_mail(
     use std::fmt::Write as _;
 
     let recipients = mailto.join(",");
+    let boundary = format!("----_=_NextPart_001_{timestamp}");
+
     let mut body = String::new();
 
-    let boundary = format!("----_=_NextPart_001_{}", timestamp);
+    // Format email header
     body.push_str("Content-Type: multipart/alternative;\n");
-    let _ = writeln!(body, "\tboundary=\"{}\"", boundary);
+    let _ = writeln!(body, "\tboundary=\"{boundary}\"");
     body.push_str("MIME-Version: 1.0\n");
 
     if !subject.is_ascii() {
         let _ = writeln!(body, "Subject: =?utf-8?B?{}?=", base64::encode(subject));
     } else {
-        let _ = writeln!(body, "Subject: {}", subject);
+        let _ = writeln!(body, "Subject: {subject}");
     }
-    let _ = writeln!(body, "From: {} <{}>", author, mailfrom);
-    let _ = writeln!(body, "To: {}", &recipients);
+    let _ = writeln!(body, "From: {author} <{mailfrom}>");
+    let _ = writeln!(body, "To: {recipients}");
     let rfc2822_date = proxmox_time::epoch_to_rfc2822(timestamp)
         .map_err(|err| Error::Generic(format!("failed to format time: {err}")))?;
-    let _ = writeln!(body, "Date: {}", rfc2822_date);
+    let _ = writeln!(body, "Date: {rfc2822_date}");
     body.push_str("Auto-Submitted: auto-generated;\n");
     body.push('\n');
+
+    // Format email body
     body.push_str("This is a multi-part message in MIME format.\n");
-    let _ = write!(body, "\n--{}\n", boundary);
+    let _ = write!(body, "\n--{boundary}\n");
+
     body.push_str("Content-Type: text/plain;\n");
     body.push_str("\tcharset=\"UTF-8\"\n");
     body.push_str("Content-Transfer-Encoding: 8bit\n");
     body.push('\n');
     body.push_str(text);
-    let _ = write!(body, "\n--{}\n", boundary);
+    let _ = write!(body, "\n--{boundary}\n");
+
     body.push_str("Content-Type: text/html;\n");
     body.push_str("\tcharset=\"UTF-8\"\n");
     body.push_str("Content-Transfer-Encoding: 8bit\n");
     body.push('\n');
     body.push_str(html);
-    let _ = write!(body, "\n--{}--", boundary);
+    let _ = write!(body, "\n--{boundary}--");
+
     Ok(body)
 }
 
-- 
2.39.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


  parent reply	other threads:[~2024-06-24 12:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-24 12:31 [pve-devel] [PATCH proxmox 1/6] notify: copy sendmail/forward fn's from proxmox_sys Lukas Wagner
2024-06-24 12:31 ` [pve-devel] [PATCH proxmox 2/6] sys: mark email fn's as deprecated Lukas Wagner
2024-06-24 12:31 ` [pve-devel] [PATCH proxmox 3/6] notify: sendmail: make mailfrom and author non-optional Lukas Wagner
2024-06-24 12:31 ` [pve-devel] [PATCH proxmox 4/6] notify: move mail formatting to separate function Lukas Wagner
2024-06-24 12:31 ` [pve-devel] [PATCH proxmox 5/6] notify: sendmail: always send multi-part message Lukas Wagner
2024-06-24 12:31 ` Lukas Wagner [this message]
2024-07-12  8:56 ` [pve-devel] partially-applied: [PATCH proxmox 1/6] notify: copy sendmail/forward fn's from proxmox_sys Wolfgang Bumiller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240624123134.321417-6-l.wagner@proxmox.com \
    --to=l.wagner@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal