Hoi,
discussing these things hadn't been easy sometimes, but the points and
arguments became clear and now we reached some kind of consensus. For
me, the discussion had been worthwhile.
[2010-12-03 11:33] Jon Steinhart <[email protected]>
>
> o Nobody objects to markus addressing this issue. The objections are that
> his implementation breaks things, and handling illegal body content is
> not a compelling enough reason for breaking things.
> So, I think that enough has been said on this topic. markus, can you outline
> for us an implementation that doesn't break things? I think that everyone
> will
> bless your changes if you do.
I agree with you here. Hence I created a new patch that concentrates
on the fourth case, explained in the other mail. AFAIS it does not
break anything.
Let me explain:
As it only modifies your attachment system now, everything is the same
if -attach is not specified.
For -attach being specified, the situation is such:
no attachment hdr + body contains only ASCII -> sent as is
attachment hdr + body contains only ASCII -> MIMEified
attachment hdr + body contains non-ASCII -> MIMEified
no attachment hdr + body contains non-ASCII -> MIMEified
The fourth case is different.
Additionally, the body text will be sent with a correct mime-type in
any case. Currently it was sent as application/octet-stream in the
third case.
The relation to `mime' at the whatnow prompt:
One surely wants to unset automimeproc when using -attach.
Running `mime' at the whatnow prompts is usually not needed as Jon's
attachment system handles it automatically.
Collisions only occure if an attachment header is present in the mail
and one runs `mime' at the whatnow prompt. If the body text contains
non-ASCII chars or not is irrelevant, it works as expected in both
cases.
As long as one does not add attachment headers to a specific draft,
one is able to use any mhbuild directives (/^#/) when running `mime'
at the whatnow prompt afterwards.
Further work:
The documentation currently does not cover my changes. Not much to
change, and I like to do that if the proposed changes are accepted.
More complex MIME structures than ``text followed by attachments'' are
not possible with Jon's attachment system. (Like they are not with
most MUAs.) One needs to create them with mhbuild directives and run
`mime' manually. (For forwarding messages, see below.)
Jon's attachment system still needs mhshow-suffix- entries or it will
be really dumb. This is something that should be covered separately,
maybe by a conceptional redesign (automatic detection, mailcap, ...).
Forwarding messages in MIME format could be added to Jon's system in a
way similar to what I proposed initially. I believe this would be
possible without breaking stuff. We would need to add -attach to
forw(1).
meillo
> P.S. I'm trying to honor the way that you're name appears in your mail
> header.
> Do you really want it to be "markus" or should it be "Markus"?
Usually, I prefer ``meillo'' because that's a nearly unique
identifier. If you want to use my real name, I don't care if you spell
it in lower-case or with capital `M'. More important is honoring my
work by mentioning my name in the ChangeLog or commit messages. ;-)
diff --git a/uip/sendsbr.c b/uip/sendsbr.c
index 57ef007..8f5f2e1 100644
--- a/uip/sendsbr.c
+++ b/uip/sendsbr.c
@@ -196,6 +196,7 @@ attach(char *attachment_header_field_name, char *draft_file_name,
int c; /* current character for body copy */
int has_attachment; /* draft has at least one attachment */
int has_body; /* draft has a message body */
+ int non_ascii; /* msg body contains non-ASCII chars */
int length; /* length of attachment header field name */
char *p; /* miscellaneous string pointer */
@@ -228,29 +229,36 @@ attach(char *attachment_header_field_name, char *draft_file_name,
if (strncasecmp(field, attachment_header_field_name, length) == 0 && field[length] == ':')
has_attachment = 1;
- if (has_attachment == 0)
- return (DONE);
-
/*
- * We have at least one attachment. Look for at least one non-blank line
- * in the body of the message which indicates content in the body.
+ * Check if body contains at least one non-blank char (= not empty)
+ * and if it contains non-ASCII chars (= need MIME).
+ * We MIMEify the message also if the body contains non-ASCII text.
*/
has_body = 0;
+ non_ascii = 0;
while (get_line() != EOF) {
for (p = field; *p != '\0'; p++) {
- if (*p != ' ' && *p != '\t') {
+ if (*p != ' ' && *p != '\t')
has_body = 1;
+ if (*p > 127 || *p < 0) {
+ non_ascii = 1;
break;
}
}
-
- if (has_body)
+ if (non_ascii)
break;
}
/*
+ * Bail out if there are no attachments and only ASCII text.
+ * This means we don't need to convert it to MIME.
+ */
+ if (!has_attachment && non_ascii == 0)
+ return (DONE);
+
+ /*
* Make names for the temporary files.
*/
@@ -299,8 +307,10 @@ attach(char *attachment_header_field_name, char *draft_file_name,
* Add a mhbuild MIME composition file line for the body if there was one.
*/
- if (has_body)
- make_mime_composition_file_entry(body_file_name, attachformat);
+ if (has_body) {
+ /* charset will be discovered/guessed by buildmimeproc */
+ fprintf(composition_file, "#text/plain %s\n", body_file_name);
+ }
/*
* Now, go back to the beginning of the draft file and look for header fields
_______________________________________________
Nmh-workers mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/nmh-workers