diff options
| author | Sam Varshavchik | 2018-07-29 10:30:12 -0400 |
|---|---|---|
| committer | Sam Varshavchik | 2018-07-29 10:30:12 -0400 |
| commit | 6c2fe8b0d5be19cdd579bb5b86cec95cab62c320 (patch) | |
| tree | 1c680ff8979be4dcdd288e810cfab25864fc4aa7 /rfc2045 | |
| parent | 8110e928827657babbe047832460d768310d789d (diff) | |
| download | courier-libs-6c2fe8b0d5be19cdd579bb5b86cec95cab62c320.tar.bz2 | |
mailbot: support UTF-8 messages.
Diffstat (limited to 'rfc2045')
| -rw-r--r-- | rfc2045/rfc2045reply.c | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/rfc2045/rfc2045reply.c b/rfc2045/rfc2045reply.c index cc2cbd8..b9b721f 100644 --- a/rfc2045/rfc2045reply.c +++ b/rfc2045/rfc2045reply.c @@ -1,5 +1,5 @@ /* -** Copyright 2000-2011 Double Precision, Inc. See COPYING for +** Copyright 2000-2018 Double Precision, Inc. See COPYING for ** distribution information. */ @@ -775,7 +775,13 @@ static int mkforward(struct rfc2045_mkreplyinfo *ri) writes(ri, "\n--"); writes(ri, boundary); - writes(ri, "\nContent-Type: message/rfc822\n"); + writes(ri, "\nContent-Type: "); + + writes(ri, first_attachment->rfcviolation & + RFC2045_ERR8BITHEADER + ? RFC2045_MIME_MESSAGE_GLOBAL + : RFC2045_MIME_MESSAGE_RFC822); + writes(ri, "\n"); if (ri->forwarddescr) { @@ -929,7 +935,7 @@ static int mkreply(struct rfc2045_mkreplyinfo *ri) off_t start_pos, end_pos, start_body, dummy; int errflag=0; char *boundary; - char *dsn_report_type; + const char *dsn_report_type; int (*dsn_report_gen)(struct rfc2045_mkreplyinfo *); struct rfc2045headerinfo *hi; @@ -1460,11 +1466,7 @@ static int mkreply(struct rfc2045_mkreplyinfo *ri) writes(ri, "\n--"); writes(ri, boundary); - writes(ri, "\nContent-Type: message/"); - - writes(ri, dsn_report_type); - writes(ri, "\n" - "Content-Transfer-Encoding: 7bit\n\n"); + writes(ri, "\n"); if (errflag == 0) errflag=(*dsn_report_gen)(ri); @@ -1477,7 +1479,14 @@ static int mkreply(struct rfc2045_mkreplyinfo *ri) off_t cnt=end_pos - start_pos; char buf[BUFSIZ]; - writes(ri, "\nContent-Type: message/rfc822\n" + writes(ri, "\nContent-Type: "); + + writes(ri, ri->rfc2045partp->rfcviolation & + RFC2045_ERR8BITHEADER + ? RFC2045_MIME_MESSAGE_GLOBAL + : RFC2045_MIME_MESSAGE_RFC822); + + writes(ri, "\n" "Content-Disposition: attachment\n\n"); if (errflag == 0) @@ -1528,7 +1537,14 @@ static void copyheaders(struct rfc2045_mkreplyinfo *ri) char *header, *value; - writes(ri, "\nContent-Type: text/rfc822-headers; charset=\"utf-8\"\n" + writes(ri, "\nContent-Type: "); + + if (ri->rfc2045partp->rfcviolation & RFC2045_ERR8BITHEADER) + writes(ri, RFC2045_MIME_MESSAGE_GLOBAL_HEADERS); + else + writes(ri, RFC2045_MIME_MESSAGE_HEADERS); + + writes(ri, "; charset=\"utf-8\"\n" "Content-Disposition: attachment\n" "Content-Transfer-Encoding: 8bit\n\n" ); @@ -1580,6 +1596,31 @@ static int replydraft(struct rfc2045_mkreplyinfo *ri) static int replydsn(struct rfc2045_mkreplyinfo *ri) { + const char *p; + int is8bit=0; + + for (p=ri->dsnfrom; *p; ++p) + if (*p & 0x80) + { + is8bit=1; + break; + } + + if (is8bit) + { + writes(ri, "Content-Type: " + RFC2045_MIME_MESSAGE_GLOBAL_DELIVERY_STATUS + "; charset=\"utf-8\"\n"); + writes(ri, "Content-Transfer-Encoding: 8bit\n\n"); + } + else + { + writes(ri, "Content-Type: " + RFC2045_MIME_MESSAGE_DELIVERY_STATUS + "\n"); + writes(ri, "Content-Transfer-Encoding: 7bit\n\n"); + } + dsn_arrival_date(ri); writes (ri, "\n" @@ -1597,6 +1638,9 @@ static int replyfeedback(struct rfc2045_mkreplyinfo *ri) { size_t i; + writes(ri, "Content-Type: message/feedback-report; charset=\"utf-8\"\n"); + writes(ri, "Content-Transfer-Encoding: 8bit\n\n"); + dsn_arrival_date(ri); writes(ri, "User-Agent: librfc2045 " RFC2045PKG "/" RFC2045VER |
