[Popcon-developers] Bug#149425: should compress data before sending

Petter Reinholdtsen Petter Reinholdtsen <pere@hungry.com>, 149425@bugs.debian.org
Tue, 05 Jul 2005 01:20:46 +0200


Here is a draft patch to add support for sending compressed MIME
emails using mime-construct.  I choosed this over mimencode from
metamail as the former is able to add the required headers while the
latter depend on us to do it.  I prefer to leave the responsibitilty
of getting the MIME headers right to someone else, and thus selected
mime-construct.

A few things need to be decided or done before it can go into the
archive:

 - Is the MIME type a good one?  Really wanted to use simliar headers
   as the HTTP headers, but mime-construct do not support x-gzip as a
   content encoding.  The content is text, and the encoding is both
   x-gzip and base64.  No idea how to represent that in MIME, so I
   picked application/x-popcon-compressed as the content type instead.

 - The receiving end need to be written.  mimedecode might perhaps be
   used there?

Here is my proposed client side patch, relative to the current CVS:

Index: debian/changelog
===================================================================
RCS file: /cvsroot/popcon/popularity-contest/debian/changelog,v
retrieving revision 1.199
diff -u -3 -p -u -r1.199 changelog
--- debian/changelog	4 Jul 2005 21:48:19 -0000	1.199
+++ debian/changelog	4 Jul 2005 23:09:26 -0000
@@ -28,6 +28,8 @@ popularity-contest (1.30) UNRELEASED; ur
     missing, to make it compatible with dpkg versions before 1.10.
     Drop versioned dependency on dpkg.  This make a backport to woody
     trivial.
+  * Send compressed MIME emails when recommended package
+    mime-construct is installed. (Closes: #149425)
   * Translations (Done by Christian Perrier)
     - Updated French from Christian Perrier
 
Index: debian/control
===================================================================
RCS file: /cvsroot/popcon/popularity-contest/debian/control,v
retrieving revision 1.13
diff -u -3 -p -u -r1.13 control
--- debian/control	4 Jul 2005 21:51:03 -0000	1.13
+++ debian/control	4 Jul 2005 23:09:26 -0000
@@ -9,7 +9,7 @@ Standards-Version: 3.6.1
 Package: popularity-contest
 Architecture: all
 Depends: ${misc:Depends}, exim4 | mail-transport-agent, ${perl:Depends}
-Recommends: cron
+Recommends: cron, mime-construct
 Suggests: anacron
 Provides: popcon
 Description: Vote for your favourite packages automatically
Index: debian/cron.weekly
===================================================================
RCS file: /cvsroot/popcon/popularity-contest/debian/cron.weekly,v
retrieving revision 1.9
diff -u -3 -p -u -r1.9 cron.weekly
--- debian/cron.weekly	4 Jul 2005 21:39:27 -0000	1.9
+++ debian/cron.weekly	4 Jul 2005 23:09:26 -0000
@@ -50,16 +50,40 @@ run_popcon > $POPCON
 # try to email the popularity contest data
 
 if [ -x "`which sendmail 2>/dev/null`" ]; then
-    (
-	if [ -n "$MAILFROM" ]; then
-		echo "From: <$MAILFROM>"
-		echo "Sender: <$MAILFROM>"
+	if [ -x "`which mime-construct 2>/dev/null`" ]; then
+        	# Make compresssed email
+		if [ -n "$MAILFROM" ]; then
+			gzip -9 < $POPCON | mime-construct \
+			    --type application/x-popcon-compressed \
+			    --encoding base64 --file - \
+			    --subject "popularity-contest submission" \
+			    --to "$MAILTO" \
+			    --header "From: <$MAILFROM>" \
+			    --header "Sender: <$MAILFROM>" \
+			    --output # | do_sendmail
+		else
+			gzip -9 < $POPCON | mime-construct \
+			    --type application/x-popcon-compressed \
+			    --encoding base64 --file - \
+			    --subject "popularity-contest submission" \
+			    --to "$MAILTO" \
+			    --output # | do_sendmail
+		fi
+	else
+            # Not able to make compressed email, send uncompressed
+	    (
+		if [ -n "$MAILFROM" ]; then
+		    	echo "From: <$MAILFROM>"
+			echo "Sender: <$MAILFROM>"
+		fi
+		echo "To: $MAILTO"
+		echo "Subject: popularity-contest submission"
+		echo "MIME-Version: 1.0"
+		echo "Content-Type: text/plain"
+		echo
+		cat $POPCON
+	    ) | do_sendmail
 	fi
-	echo "To: $MAILTO"
-	echo "Subject: popularity-contest submission"
-	echo
-	cat $POPCON
-    ) | do_sendmail
 else
 	logger -t popcon "unable to submit report using sendmail."
 fi