MLMMJ Mailing List Manager
 help / color / mirror / Atom feed
From: Jakob Hirsch <jh@plonk.de>
To: mlmmj@mlmmj.org
Subject: Re: Fw: footer isn't appended to multipart messages (part II: reality
Date: Tue, 19 Jul 2005 22:09:22 +0000	[thread overview]
Message-ID: <42DD7A12.9010108@plonk.de> (raw)
In-Reply-To: <200507052130.02825.lists@seattleserver.com>

[-- Attachment #1: Type: text/plain, Size: 592 bytes --]

Jakob Hirsch wrote:

> To make it really reliable, I will take the easy way: Create a new MIME
> envelope with multipart/mixed for every Content-Type (not only for

done. Blatantly simple, compared with the original approach.

> We can even think about doing this with all messages, so the behaviour
> and appearance is consistent. But that should probably be controlled by
> a switch in the control directory (like "footer_always_mime").

ok, maybe later... :)

It could also be used for specifying a charset, but then an encoding
would also be needed (or we assume something, 8bit or qp).


[-- Attachment #2: mlmmj-footer-mime3.patch --]
[-- Type: text/plain, Size: 3621 bytes --]

--- mlmmj-1.2.8/src/do_all_the_voodo_here.c	2005-05-09 14:50:15.000000000 +0200
+++ mlmmj-1.2.8-jh4/src/do_all_the_voodo_here.c	2005-07-19 23:55:32.000000000 +0200
@@ -79,9 +79,12 @@
 		 const char **delhdrs, struct mailhdr *readhdrs,
 		 struct strlist *allhdrs, const char *prefix)
 {
-	char *hdrline, *subject, *unqp;
+	char *hdrline, *subject, *unqp, *buf;
 	int hdrsadded = 0;
 	int subject_present = 0;
+	char *content_type_orig = NULL;	/* original Content-Type header */
+	char *content_te_orig = NULL;   /* original Content-Transfer-Encoding */
+	char *boundary = NULL;
 
 	allhdrs->count = 0;
 	allhdrs->strs = NULL;
@@ -116,7 +119,22 @@
 					myfree(subject);
 					subject_present = 1;
 				}
-
+				
+				/* time to add Content-Type */
+				if (content_type_orig || content_te_orig) {
+					/* create new boundary for MIME-encapsulation */
+					buf = random_str();
+					boundary = concatstr(3, "=_=", buf, "=_=");
+					myfree(buf);
+
+					/* and create new content-type header */
+					buf = concatstr(3,
+						"Content-Type: multipart/mixed; boundary=\"",
+						boundary, "\"\n");
+					writen(outfd, buf, strlen(buf));
+					myfree(buf);
+				}
+				
 				if(writen(outfd, hdrline, strlen(hdrline))
 						< 0) {
 					myfree(hdrline);
@@ -159,7 +177,25 @@
 				myfree(unqp);
 			}
 		}
-		
+
+		if (footfd>=0) {
+			/* save MIME header for later use */
+			if (!strncasecmp(hdrline, "Content-Type:", 13)) {
+				if (!content_type_orig)
+					content_type_orig = hdrline;
+				else
+					myfree(hdrline); /* drop surplus */
+				continue;
+			} else if (!strncasecmp(hdrline, 
+					"Content-Transfer-Encoding:", 26)) {
+				if (!content_te_orig)
+				    content_te_orig = hdrline;
+				else
+				    myfree(hdrline); /* drop surplus */
+				continue;
+			}
+		}
+
 		/* Should it be stripped? */
 		if(delhdrs) {
 			if(!findit(hdrline, delhdrs))
@@ -170,20 +206,64 @@
 
 		myfree(hdrline);
 	}
+	
+	if (content_type_orig || content_te_orig) {
 
-	/* Just print the rest of the mail */
-	if(dumpfd2fd(infd, outfd) < 0) {
-		log_error(LOG_ARGS, "Error when dumping rest of mail");
-		return -1;
-	}
+		buf = concatstr(3,
+			"This is a multi-part message in MIME format.\n\n--",
+			boundary, "\n");
+		writen(outfd, buf, strlen(buf));
+		myfree(buf);
+
+		if (content_type_orig) {
+			writen(outfd, content_type_orig, strlen(content_type_orig));
+			myfree(content_type_orig);
+		}
+        
+		if (content_te_orig) {
+			writen(outfd, content_te_orig, strlen(content_te_orig));
+			myfree(content_te_orig);
+		}
+		
+		writen(outfd, "\n", 1);
 
-	/* No more, lets add the footer if one */
-	if(footfd >= 0)
+		/* Just print the rest of the mail */
+		if(dumpfd2fd(infd, outfd) < 0) {
+			log_error(LOG_ARGS, "Error when dumping rest of mail");
+			return -1;
+		}
+
+		buf = concatstr(3, "\n--", boundary,
+			"\nContent-Type: text/plain\nContent-Disposition: inline\n\n");
+		writen(outfd, buf, strlen(buf));
+ 		myfree(buf);
+
+		/* No more, lets add the footer if one */
 		if(dumpfd2fd(footfd, outfd) < 0) {
 			log_error(LOG_ARGS, "Error when adding footer");
 			return -1;
 		}
 
+		buf = concatstr(3, "\n--", boundary, "--\n");
+		myfree(boundary);
+		writen(outfd, buf, strlen(buf));
+		myfree(buf);
+		
+	} else {
+		/* Just print the rest of the mail */
+		if(dumpfd2fd(infd, outfd) < 0) {
+			log_error(LOG_ARGS, "Error when dumping rest of mail");
+			return -1;
+		}
+
+		/* No more, lets add the footer if one */
+		if(footfd >= 0)
+			if(dumpfd2fd(footfd, outfd) < 0) {
+				log_error(LOG_ARGS, "Error when adding footer");
+				return -1;
+			}
+	}
+
 	fsync(outfd);
 
 	return 0;

  parent reply	other threads:[~2005-07-19 22:09 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-05 21:30 footer isn't appended to multipart messages Casey Allen Shobe
2005-07-05 22:09 ` Sven 'Darkman' Michels
2005-07-05 23:32 ` footer isn't appended to multipart messages (part II: reality check!) Patrick Bennett
2005-07-06  2:38 ` Casey Allen Shobe
2005-07-06  6:17 ` Fw: " Patrick Bennett
2005-07-06  8:05 ` footer isn't appended to multipart messages Mads Martin Joergensen
2005-07-06  8:12 ` footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-06  8:15 ` Mads Martin Joergensen
2005-07-06 13:00 ` Fw: " Morten K. Poulsen
2005-07-07 15:31 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-07 16:07 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-09 18:10 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-15 14:29 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-16 13:12 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-16 14:52 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-18  9:49 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-18 18:12 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-18 23:26 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-19  7:25 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-19  7:59 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-19  8:05 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-07-19 18:44 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-07-19 22:09 ` Jakob Hirsch [this message]
2005-07-20  6:18 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-10  5:28 ` Mads Martin Joergensen
2005-10-10 21:41 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-10-10 21:47 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Neale Pickett
2005-10-10 22:08 ` Fw: footer isn't appended to multipart messages (part II: reality Jakob Hirsch
2005-10-11  0:15 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-11  3:06 ` Neale Pickett
2005-10-11  7:52 ` Fw: footer isn't appended to multipart messages (part II: Jakob Hirsch
2005-10-11  8:52 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-11  9:30 ` Fw: footer isn't appended to multipart messages (part II: Jakob Hirsch
2005-10-11 12:24 ` Fw: footer isn't appended to multipart messages (part II: reality check!) Mads Martin Joergensen
2005-10-11 12:55 ` Neale Pickett

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=42DD7A12.9010108@plonk.de \
    --to=jh@plonk.de \
    --cc=mlmmj@mlmmj.org \
    /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