aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2007-10-23 05:26:49 +0800
committerdelphij <delphij@FreeBSD.org>2007-10-23 05:26:49 +0800
commita810cb4ecb4a0fea98820614956ab56118f40d81 (patch)
treef8dce515bc7ac820b356c2888317d9dc32a96e2c /mail
parentce1386150b287407fffa2c2397a99dca59f21834 (diff)
downloadfreebsd-ports-gnome-a810cb4ecb4a0fea98820614956ab56118f40d81.tar.gz
freebsd-ports-gnome-a810cb4ecb4a0fea98820614956ab56118f40d81.tar.zst
freebsd-ports-gnome-a810cb4ecb4a0fea98820614956ab56118f40d81.zip
Teach mailman how to utilize postfix's XVERP functionality,
which drastically improves mail delivery performance when VERP is being used. In order to exploit the performance gain, one has to choose 'POSTFIX' in the OPTIONS menu, configure postfix with proper smtpd_authorized_verp_clients settings, then add: VERP_STYLE = 'Postfix' to the mm_cfg.py configuration. The Postfix style XVERP delivery is disabled by default. PR: ports/116847 Approved by: maintainer timeout
Diffstat (limited to 'mail')
-rw-r--r--mail/mailman/Makefile3
-rw-r--r--mail/mailman/files/patch-Mailman::Defaults.py.in23
-rw-r--r--mail/mailman/files/postfix-verp.diff51
3 files changed, 71 insertions, 6 deletions
diff --git a/mail/mailman/Makefile b/mail/mailman/Makefile
index c378cb54c4b6..fd471d0ddeb0 100644
--- a/mail/mailman/Makefile
+++ b/mail/mailman/Makefile
@@ -7,7 +7,7 @@
PORTNAME= mailman
DISTVERSION= 2.1.9
-PORTREVISION= 4
+PORTREVISION= 5
CATEGORIES?= mail
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} \
http://www.list.org/
@@ -95,6 +95,7 @@ defined(WITH_COURIER)
BROKEN= choose only one MTA integration
.endif
MAIL_GID?= mailman
+EXTRA_PATCHES+= ${FILESDIR}/postfix-verp.diff
.endif
.if defined(WITH_COURIER)
diff --git a/mail/mailman/files/patch-Mailman::Defaults.py.in b/mail/mailman/files/patch-Mailman::Defaults.py.in
index aef93e86a856..cf83b064af95 100644
--- a/mail/mailman/files/patch-Mailman::Defaults.py.in
+++ b/mail/mailman/files/patch-Mailman::Defaults.py.in
@@ -1,6 +1,6 @@
---- Mailman/Defaults.py.in.orig Thu Dec 26 21:48:41 2002
-+++ Mailman/Defaults.py.in Mon Jan 20 14:07:05 2003
-@@ -97,7 +97,7 @@
+--- Mailman/Defaults.py.in.orig 2006-08-04 20:20:33.000000000 +0800
++++ Mailman/Defaults.py.in 2007-10-03 08:09:00.678284951 +0800
+@@ -107,7 +107,7 @@
# Command that is used to convert text/html parts into plain text. This
# should output results to standard output. %(filename)s will contain the
# name of the temporary file that the program should operate on.
@@ -9,7 +9,7 @@
-@@ -356,8 +356,8 @@
+@@ -392,8 +392,8 @@
# and virtual-mailman.db files, respectively, from the associated plain text
# files. The file being updated will be appended to this string (with a
# separating space), so it must be appropriate for os.system().
@@ -20,7 +20,7 @@
# Ceiling on the number of recipients that can be specified in a single SMTP
# transaction. Set to 0 to submit the entire recipient list in one
-@@ -391,7 +391,7 @@
+@@ -427,7 +427,7 @@
# Command for direct command pipe delivery to sendmail compatible program,
# when DELIVERY_MODULE is 'Sendmail'.
@@ -29,3 +29,16 @@
# Set these variables if you need to authenticate to your NNTP server for
# Usenet posting or reading. If no authentication is necessary, specify None
+@@ -661,6 +661,12 @@
+ # debugging).
+ MAX_AUTORESPONSES_PER_DAY = 10
+
++# This FreeBSD port of Mailman can utilize Postfix SMTP server's VERP ability.
++# You may set VERP_STYLE = 'Postfix' to enable it.
++VERP_STYLE = 'Manual'
++
++# When using Postfix style VERP you will need the following setting.
++POSTFIX_XVERP_OPTS = '+='
+
+
+ #####
diff --git a/mail/mailman/files/postfix-verp.diff b/mail/mailman/files/postfix-verp.diff
new file mode 100644
index 000000000000..af07cf36086e
--- /dev/null
+++ b/mail/mailman/files/postfix-verp.diff
@@ -0,0 +1,51 @@
+--- Mailman/Handlers/SMTPDirect.py.orig 2005-12-31 02:50:08.000000000 +0800
++++ Mailman/Handlers/SMTPDirect.py 2007-10-03 08:12:39.402049123 +0800
+@@ -64,11 +64,11 @@
+ self.__conn.connect(mm_cfg.SMTPHOST, mm_cfg.SMTPPORT)
+ self.__numsessions = mm_cfg.SMTP_MAX_SESSIONS_PER_CONNECTION
+
+- def sendmail(self, envsender, recips, msgtext):
++ def sendmail(self, envsender, recips, msgtext, mailopts=[]):
+ if self.__conn is None:
+ self.__connect()
+ try:
+- results = self.__conn.sendmail(envsender, recips, msgtext)
++ results = self.__conn.sendmail(envsender, recips, msgtext, mailopts)
+ except smtplib.SMTPException:
+ # For safety, close this connection. The next send attempt will
+ # automatically re-open it. Pass the exception on up.
+@@ -114,7 +114,7 @@
+ # recipients they'll swallow in a single transaction.
+ deliveryfunc = None
+ if (not msgdata.has_key('personalize') or msgdata['personalize']) and (
+- msgdata.get('verp') or mlist.personalize):
++ (msgdata.get('verp') and mm_cfg.VERP_STYLE == 'Manual') or mlist.personalize):
+ chunks = [[recip] for recip in recips]
+ msgdata['personalize'] = 1
+ deliveryfunc = verpdeliver
+@@ -357,8 +357,14 @@
+ # Errors-To while new ones will at worst ignore the header.
+ del msg['sender']
+ del msg['errors-to']
+- msg['Sender'] = envsender
+- msg['Errors-To'] = envsender
++ mailopts=[]
++ if msgdata.get('verp') and mm_cfg.VERP_STYLE == 'Postfix':
++ mailopts.append('XVERP=' + mm_cfg.POSTFIX_XVERP_OPTS)
++ else:
++ # these get left out of VERPed messages so they don't accidently
++ # override the VERP header.
++ msg['Sender'] = envsender
++ msg['Errors-To'] = envsender
+ # Get the plain, flattened text of the message, sans unixfrom
+ msgtext = msg.as_string()
+ refused = {}
+@@ -366,7 +372,7 @@
+ msgid = msg['message-id']
+ try:
+ # Send the message
+- refused = conn.sendmail(envsender, recips, msgtext)
++ refused = conn.sendmail(envsender, recips, msgtext, mailopts)
+ except smtplib.SMTPRecipientsRefused, e:
+ syslog('smtp-failure', 'All recipients refused: %s, msgid: %s',
+ e, msgid)