From patchwork Thu Aug 27 11:14:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lukas Fleischer X-Patchwork-Id: 1762 Return-Path: Delivered-To: patchwork@archlinux.org Received: from apollo.archlinux.org (localhost [127.0.0.1]) by apollo.archlinux.org (Postfix) with ESMTP id B5F6D1AC6E3AC for ; Thu, 27 Aug 2020 11:15:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on apollo.archlinux.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=DKIMWL_WL_HIGH=-0.959, DKIM_SIGNED=0.1,DKIM_VALID=-0.1,DKIM_VALID_AU=-0.1,LOCAL_CHARITY=1.5, MAILING_LIST_MULTI=-1,RCVD_IN_DNSWL_MED=-2.3,SPF_HELO_NONE=0.001, T_DMARC_POLICY_NONE=0.01 autolearn=ham autolearn_force=no version=3.4.4 X-Spam-BL-Results: [127.0.9.2] Received: from orion.archlinux.org (orion.archlinux.org [IPv6:2a01:4f8:160:6087::1]) by apollo.archlinux.org (Postfix) with ESMTPS for ; Thu, 27 Aug 2020 11:15:12 +0000 (UTC) Received: from orion.archlinux.org (localhost [127.0.0.1]) by orion.archlinux.org (Postfix) with ESMTP id 2DD491D3839BE6; Thu, 27 Aug 2020 11:15:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=luna2; t=1598526910; bh=BOpFiglZbVrcg0ufQD1uY1UbIcFwpugXDbK72qoVh0w=; h=From:To:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe; b=mLNQ7gdxvYKu35D8I8ZxLE1XqbgnwNStqp2KHvf19hx/6IvBDiJYdnw5Nvz6u9D2j z6bKvyT7pBOCW4++ZTYpbUC1NRur1PGHrYOB+nlTB2iS1466A2M7BvLhwbNA/YeC9i +5ghfUgLXmNfV7rhJ+Rzb5hdxjnVMK0S8jcS8WNWRa0S2AWHC1uQVLcXoJiwcRbWWT CUW5aU0IuWLPvIR7LgGkRzbVLmDCrbrpSzNttuamSPBsjrrn4cn34XIdLdsxrUYFtj 6S0JBWN2ISwvKCZXaXyO0vDkSWhvm7w7ZrufUMjQAGkOUOgfp1GKrIiojN4ZvA7OdX URSHh9ZqX8Ni1lsjBd8wMnYR9FNPAlTJXgfRPBE7Km/9Fbcv77vipR0BPpe/FXEJUC 0DYEPiOYEAYGAslTk3LQLoEwfQn60iYhxe1JAjlzVBsiQbcb3jtG/RS4DyStgbqY5B hNDCGrDiDlhbWQKLCs5JJojf3MPO5NMjDdGTyoOyG6wRE8PxIZXXTV7eLVGhkNHYr0 Dp3I/yhrEFLz61X+2pJu8pgJVmV30OZRqc6RBg3YyUgT4dBUixffI1yu2eAgOiE/x+ BCWAqxDQKKlOGEgjCRkekEajf5tAkbm4eWGeti7k4Vs2FJtgmnmWVe0WbhTiX/oHEF jQWy19E+NYeFqsYzztW7F4RE= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=orion; t=1598526911; bh=BOpFiglZbVrcg0ufQD1uY1UbIcFwpugXDbK72qoVh0w=; h=From:To:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe; b=NzGEKKOZLjibZkNp63wuOBRYRRBO2V9QeY6LAEx7T7f0vMa6qAUjqDGKST5EanJDD 6cC39Tfp6yqAQAP25LWJQlM6AY1fPrbVhYSKVWc1eaV7xRBqSIvNLRIZ+Krtz1svPY ew/GQQNm3TYfUC9Owxp3XWEbeUu0E483o+OzaYg1D4tWnqgKccFr/FLaQJHavzVfvf DNpNnftHnJeRpmiXeGyKmNe0fmghHKX32nBE8k9CCEJTxbH+m39fgDSwOCx0vOwkeP uBAwUO/02VxiHjjT+KkwU7438gzH8XrZfnEIAOtsS2OSbbqp2OS535vj2cEsZuF7+z JEBNaDhkCCM/1tpXdhBcjPV2AUvGcQVXu0rv2zaiI/DynzvQ2TAspBW68KEiT/2f5x wb+chzkui7qP0SamvgyXSMoSry0l4UVKLD+WIeGOYctcOokEfs4K1b3TULU5S0v6Ll JbrX1MkdKJHutWxn4cHOwkfwAhRxd8bkFZfN1BEPNCkQeChaNf+mxcWQvii8aiHRNe ROcAV9GEJH8aWzdzhgy5kyLBuUF7/WFwDDoLXSsIbhfhph0GZ0J8eIQtB8cKV167Fj wRFMLD8VmgQZASmJ2Ti1pB6pNUPL7ldrrziRIebDWKky8FkJpkKxgS+8z4TVb/uhbp MSfJe60aqFlwJV4FdKQpT2qk= From: Lukas Fleischer DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=archlinux.org; s=orion; t=1598526902; bh=BOpFiglZbVrcg0ufQD1uY1UbIcFwpugXDbK72qoVh0w=; h=From:To:Subject:Date; b=D6vvMvOPgUXRD/RfCysRP9Zroa97qi9P5Cx4X2I4mxbfXvpaCugH9nwrkKwGw5dhx XB2hENT9aX8kwpvD2ncKStHafr72Zk23xRCzyZcAr33Sv4iuWj+L/uLCQEusdRiKYg Pc/E7cQs5qIiebdR8HIuUe19ZPn2kqggQJVcTeeu96rShacqn8qHa8eIfzyBUrkcS+ 4VeLK0COjPPbVOQmqYHr81+7ZEnK2gHmLdT0lhFzbDtRW2ktc1VGI/ibkrnA4Eqo/E uwRMhLap5SkEWz0y9Deg7Z1yHOS3jpw6q+idjFDoMgiNmXY8AW8IGirk3f63MEDRsw 0qJPta8eyQIQeHEUV4DjcxY4OROoKI0LJbSCeb2wBy5R1HRMKNa8V1EwNOffxqFcpC wM3wDwDLdV1iHJFatA/PZ8WC3oKVRhe7pcTbL3KQMK3tldJXlgDv3+B7UmMakYkBjp ePMCXCwVhXNySj/Hp0oiNW77pmxMNGOHXS9tt+MwUj+ewHcKIXCSDAuXnUPOpERHEn S2YPT6w0me8cb6tgrBOoHH8JhtH/rEfgscNHqcLKBRD1Kx0c6xNcMroOjHneffn7H8 b/1ol5G4zpdlAp07j1b/3+1l2MiO39EDAhfyIrzXtK9p8zNNuMmRTnTE0YmE55sHY0 lJHeX3vHniTPkLT8JOwTpcsQ= To: aur-dev@archlinux.org Subject: [PATCH] Deliver emails to Cc in smtplib code path Date: Thu, 27 Aug 2020 07:14:59 -0400 Message-Id: <20200827111459.57672-1-lfleischer@archlinux.org> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 X-BeenThere: aur-dev@archlinux.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: "Arch User Repository \(AUR\) Development" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: aur-dev-bounces@archlinux.org Sender: "aur-dev" When using the sendmail() function with smtplib.SMTP or smtplib.SMTP_SSL, the list of actual recipients for the email (to be translated to RCPT commands) has to be provided as a parameter. Update the notification script and add all Cc recipients to that parameter. Signed-off-by: Lukas Fleischer --- aurweb/scripts/notify.py | 18 ++++++++++++------ test/t2500-notify.t | 16 +++++++++++++--- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/aurweb/scripts/notify.py b/aurweb/scripts/notify.py index 79cf633..b698bd7 100755 --- a/aurweb/scripts/notify.py +++ b/aurweb/scripts/notify.py @@ -14,10 +14,6 @@ import aurweb.l10n aur_location = aurweb.config.get('options', 'aur_location') -def headers_cc(cclist): - return {'Cc': str.join(', ', cclist)} - - def headers_msgid(thread_id): return {'Message-ID': thread_id} @@ -53,6 +49,9 @@ class Notification: def get_headers(self): return {} + def get_cc(self): + return [] + def get_body_fmt(self, lang): body = '' for line in self.get_body(lang).splitlines(): @@ -80,6 +79,8 @@ class Notification: msg['From'] = sender msg['Reply-to'] = reply_to msg['To'] = to + if self.get_cc(): + msg['Cc'] = str.join(', ', self.get_cc()) msg['X-AUR-Reason'] = reason msg['Date'] = email.utils.formatdate(localtime=True) @@ -116,6 +117,7 @@ class Notification: server.login(user, passwd) server.set_debuglevel(0) + deliver_to = [to] + self.get_cc() server.sendmail(sender, to, msg.as_bytes()) server.quit() @@ -450,6 +452,9 @@ class RequestOpenNotification(Notification): def get_recipients(self): return [(self._to, 'en')] + def get_cc(self): + return self._cc + def get_subject(self, lang): return '[PRQ#%d] %s Request for %s' % \ (self._reqid, self._reqtype.title(), self._pkgbase) @@ -478,7 +483,6 @@ class RequestOpenNotification(Notification): # Use a deterministic Message-ID for the first email referencing a # request. headers = headers_msgid(thread_id) - headers.update(headers_cc(self._cc)) return headers @@ -509,6 +513,9 @@ class RequestCloseNotification(Notification): def get_recipients(self): return [(self._to, 'en')] + def get_cc(self): + return self._cc + def get_subject(self, lang): return '[PRQ#%d] %s Request for %s %s' % (self._reqid, self._reqtype.title(), @@ -538,7 +545,6 @@ class RequestCloseNotification(Notification): def get_headers(self): thread_id = '' headers = headers_reply(thread_id) - headers.update(headers_cc(self._cc)) return headers diff --git a/test/t2500-notify.t b/test/t2500-notify.t index 5ef64c1..713b31e 100755 --- a/test/t2500-notify.t +++ b/test/t2500-notify.t @@ -277,13 +277,18 @@ test_expect_success 'Test subject and body of merge notifications.' ' test_cmp actual expected ' -test_expect_success 'Test subject and body of request open notifications.' ' +test_expect_success 'Test Cc, subject and body of request open notifications.' ' cat <<-EOD | sqlite3 aur.db && /* Use package request IDs which can be distinguished from other IDs. */ - INSERT INTO PackageRequests (ID, PackageBaseID, PackageBaseName, UsersID, ReqTypeID, Comments, ClosureComment) VALUES (3001, 1001, "foobar", 1, 1, "This is a request test comment.", ""); + INSERT INTO PackageRequests (ID, PackageBaseID, PackageBaseName, UsersID, ReqTypeID, Comments, ClosureComment) VALUES (3001, 1001, "foobar", 2, 1, "This is a request test comment.", ""); EOD >sendmail.out && "$NOTIFY" request-open 1 3001 orphan 1001 && + grep ^Cc: sendmail.out >actual && + cat <<-EOD >expected && + Cc: user@localhost, tu@localhost + EOD + test_cmp actual expected && grep ^Subject: sendmail.out >actual && cat <<-EOD >expected && Subject: [PRQ#3001] Orphan Request for foobar @@ -324,9 +329,14 @@ test_expect_success 'Test subject and body of request open notifications for mer test_cmp actual expected ' -test_expect_success 'Test subject and body of request close notifications.' ' +test_expect_success 'Test Cc, subject and body of request close notifications.' ' >sendmail.out && "$NOTIFY" request-close 1 3001 accepted && + grep ^Cc: sendmail.out >actual && + cat <<-EOD >expected && + Cc: user@localhost, tu@localhost + EOD + test_cmp actual expected && grep ^Subject: sendmail.out >actual && cat <<-EOD >expected && Subject: [PRQ#3001] Deletion Request for foobar Accepted