~soywod/pimalaya

smtp: also send emails to Cc and Bcc v1 APPLIED

Hugo Osvaldo Barrera: 2
 smtp: also send emails to Cc and Bcc
 smtp: avoid some unnecessary cloning

 2 files changed, 14 insertions(+), 14 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~soywod/pimalaya/patches/40091/mbox | git am -3
Learn more about email & git

[PATCH 1/2] smtp: also send emails to Cc and Bcc Export this patch

---
 src/sender/smtp/smtp.rs | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/sender/smtp/smtp.rs b/src/sender/smtp/smtp.rs
index aafe809..1cfaaf5 100644
--- a/src/sender/smtp/smtp.rs
+++ b/src/sender/smtp/smtp.rs
@@ -106,9 +106,9 @@ impl<'a> Sender for Smtp<'a> {
            email = mailparse::parse_mail(&buffer).map_err(Error::ParseEmailError)?;
        };

        let headers = email.get_headers();
        let envelope = Envelope::new(
            email
                .get_headers()
            headers
                .get_first_header("From")
                .and_then(|header| addrparse_header(header).ok())
                .and_then(|addrs| addrs.first().cloned())
@@ -118,10 +118,11 @@ impl<'a> Sender for Smtp<'a> {
                    }
                    MailAddr::Single(single) => single.addr.parse().ok(),
                }),
            email
                .get_headers()
            headers
                .get_all_headers("To")
                .into_iter()
                .chain(headers.get_all_headers("Cc").into_iter())
                .chain(headers.get_all_headers("Bcc").into_iter())
                .flat_map(|header| addrparse_header(header))
                .flat_map(|addrs| {
                    addrs
@@ -142,6 +143,8 @@ impl<'a> Sender for Smtp<'a> {
        )
        .map_err(Error::BuildEnvelopeError)?;

        // TODO: Bcc should be removed from headers before sending the email.

        self.transport()?
            .send_raw(&envelope, email.raw_bytes)
            .map_err(Error::SendError)?;
-- 
2.40.0


[PATCH 2/2] smtp: avoid some unnecessary cloning Export this patch

---
 src/sender/smtp/smtp.rs | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/sender/smtp/smtp.rs b/src/sender/smtp/smtp.rs
index 1cfaaf5..126247f 100644
--- a/src/sender/smtp/smtp.rs
+++ b/src/sender/smtp/smtp.rs
@@ -111,7 +111,7 @@ impl<'a> Sender for Smtp<'a> {
            headers
                .get_first_header("From")
                .and_then(|header| addrparse_header(header).ok())
                .and_then(|addrs| addrs.first().cloned())
                .and_then(|addrs| addrs.into_inner().into_iter().next())
                .and_then(|addr| match addr {
                    MailAddr::Group(group) => {
                        group.addrs.first().and_then(|addr| addr.addr.parse().ok())
@@ -123,22 +123,19 @@ impl<'a> Sender for Smtp<'a> {
                .into_iter()
                .chain(headers.get_all_headers("Cc").into_iter())
                .chain(headers.get_all_headers("Bcc").into_iter())
                .flat_map(|header| addrparse_header(header))
                .flat_map(addrparse_header)
                .flat_map(|addrs| {
                    addrs
                        .iter()
                        .into_inner()
                        .into_iter()
                        .map(|addr| match addr {
                            MailAddr::Group(group) => group
                                .addrs
                                .iter()
                                .map(|addr| addr.addr.clone())
                                .collect::<Vec<_>>(),
                            MailAddr::Single(single) => vec![single.addr.clone()],
                            MailAddr::Group(group) => group.addrs.into_iter().collect::<Vec<_>>(),
                            MailAddr::Single(single) => vec![single],
                        })
                        .collect::<Vec<_>>()
                })
                .flatten()
                .flat_map(|addr| addr.parse())
                .flat_map(|addr| addr.addr.parse())
                .collect::<Vec<_>>(),
        )
        .map_err(Error::BuildEnvelopeError)?;
-- 
2.40.0