--- a/src/internfile/mh_mail.cpp
+++ b/src/internfile/mh_mail.cpp
@@ -279,16 +279,8 @@
// with this but it expects text/plain to be utf-8 already, so we
// handle the transcoding if needed
if (m_metaData[cstr_dj_keymt] == cstr_textplain) {
- string utf8;
- if (!transcode(body, utf8, m_metaData[cstr_dj_keycharset], cstr_utf8)) {
- LOGERR((" processAttach: transcode to utf-8 failed for charset "
- "[%s]\n", m_metaData[cstr_dj_keycharset].c_str()));
- // can't transcode at all -> data is garbage just erase it
- body.clear();
- } else {
- m_metaData[cstr_dj_keycharset] = cstr_utf8;
- body.swap(utf8);
- }
+ if (!txtdcode("MimeHandlerMail::processAttach"))
+ body.clear();
}
// Ipath
@@ -320,32 +312,32 @@
// Handle some headers.
string& text = m_metaData[cstr_dj_keycontent];
Binc::HeaderItem hi;
- string transcoded;
+ string decoded;
if (doc->h.getFirstHeader("From", hi)) {
- rfc2047_decode(hi.getValue(), transcoded);
+ rfc2047_decode(hi.getValue(), decoded);
if (preview())
text += string("From: ");
- text += transcoded + cstr_newline;
+ text += decoded + cstr_newline;
if (depth == 1) {
- m_metaData[cstr_dj_keyauthor] = transcoded;
+ m_metaData[cstr_dj_keyauthor] = decoded;
}
}
if (doc->h.getFirstHeader("To", hi)) {
- rfc2047_decode(hi.getValue(), transcoded);
+ rfc2047_decode(hi.getValue(), decoded);
if (preview())
text += string("To: ");
- text += transcoded + cstr_newline;
+ text += decoded + cstr_newline;
if (depth == 1) {
- m_metaData[cstr_dj_keyrecipient] = transcoded;
+ m_metaData[cstr_dj_keyrecipient] = decoded;
}
}
if (doc->h.getFirstHeader("Cc", hi)) {
- rfc2047_decode(hi.getValue(), transcoded);
+ rfc2047_decode(hi.getValue(), decoded);
if (preview())
text += string("Cc: ");
- text += transcoded + cstr_newline;
+ text += decoded + cstr_newline;
if (depth == 1) {
- m_metaData[cstr_dj_keyrecipient] += " " + transcoded;
+ m_metaData[cstr_dj_keyrecipient] += " " + decoded;
}
}
if (doc->h.getFirstHeader("Message-Id", hi)) {
@@ -355,31 +347,31 @@
}
}
if (doc->h.getFirstHeader("Date", hi)) {
- rfc2047_decode(hi.getValue(), transcoded);
+ rfc2047_decode(hi.getValue(), decoded);
if (depth == 1) {
- time_t t = rfc2822DateToUxTime(transcoded);
+ time_t t = rfc2822DateToUxTime(decoded);
if (t != (time_t)-1) {
char ascuxtime[100];
sprintf(ascuxtime, "%ld", (long)t);
m_metaData[cstr_dj_keymd] = ascuxtime;
} else {
// Leave mtime field alone, ftime will be used instead.
- LOGDEB(("rfc2822Date...: failed: [%s]\n", transcoded.c_str()));
+ LOGDEB(("rfc2822Date...: failed: [%s]\n", decoded.c_str()));
}
}
if (preview())
text += string("Date: ");
- text += transcoded + cstr_newline;
+ text += decoded + cstr_newline;
}
if (doc->h.getFirstHeader("Subject", hi)) {
- rfc2047_decode(hi.getValue(), transcoded);
+ rfc2047_decode(hi.getValue(), decoded);
if (depth == 1) {
- m_metaData[cstr_dj_keytitle] = transcoded;
- m_subject = transcoded;
+ m_metaData[cstr_dj_keytitle] = decoded;
+ m_subject = decoded;
}
if (preview())
text += string("Subject: ");
- text += transcoded + cstr_newline;
+ text += decoded + cstr_newline;
}
// Check for the presence of configured additional headers and possibly
@@ -597,22 +589,23 @@
}
// We are dealing with an inline part of text/plain or text/html
- // type There may be several such parts, which is why we don't
- // just return a text or html subdoc and let the filter stack
- // work: we want to concatenate them in place instead
+ // type. We can't just return a text or html subdoc and let the
+ // filter stack work: this would create another subdocument, but
+ // we want instead to decode a body part of this message document.
LOGDEB2(("walkmime: final: body start offset %d, length %d\n",
doc->getBodyStartOffset(), doc->getBodyLength()));
string body;
doc->getBody(body, 0, doc->bodylength);
-
- string decoded;
- const string *bdp;
- if (!decodeBody(cte, body, decoded, &bdp)) {
- LOGERR(("MimeHandlerMail::walkmime: failed decoding body\n"));
- }
- if (bdp != &body)
- body = decoded;
+ {
+ string decoded;
+ const string *bdp;
+ if (!decodeBody(cte, body, decoded, &bdp)) {
+ LOGERR(("MimeHandlerMail::walkmime: failed decoding body\n"));
+ }
+ if (bdp != &body)
+ body.swap(decoded);
+ }
// Handle html stripping and transcoding to utf8
if (!stringlowercmp("text/html", content_type.value)) {