diff --git a/src/internfile/mh_mail.cpp b/src/internfile/mh_mail.cpp index 35b8b56c..e31b26d2 100644 --- a/src/internfile/mh_mail.cpp +++ b/src/internfile/mh_mail.cpp @@ -52,6 +52,8 @@ static const string cstr_author = "author"; static const string cstr_recipient = "recipient"; static const string cstr_modificationdate = "modificationdate"; static const string cstr_title = "title"; +static const string cstr_msgid = "msgid"; +static const string cstr_abstract = "abstract"; MimeHandlerMail::~MimeHandlerMail() { @@ -165,7 +167,11 @@ bool MimeHandlerMail::next_document() res = processMsg(m_bincdoc, 0); LOGDEB1(("MimeHandlerMail::next_document: mimetype %s\n", m_metaData[cstr_mimetype].c_str())); + const string& txt = m_metaData[cstr_content]; + if (m_startoftext < txt.size()) + m_metaData[cstr_abstract] = txt.substr(m_startoftext, 250); } else { + m_metaData[cstr_abstract] = ""; res = processAttach(); } m_idx++; @@ -313,6 +319,12 @@ bool MimeHandlerMail::processMsg(Binc::MimePart *doc, int depth) m_metaData[cstr_recipient] += " " + transcoded; } } + if (doc->h.getFirstHeader("Message-Id", hi)) { + if (depth == 1) { + m_metaData[cstr_msgid] = hi.getValue(); + trimstring(m_metaData[cstr_msgid], "<>"); + } + } if (doc->h.getFirstHeader("Date", hi)) { rfc2047_decode(hi.getValue(), transcoded); if (depth == 1) { @@ -337,7 +349,7 @@ bool MimeHandlerMail::processMsg(Binc::MimePart *doc, int depth) text += string("Subject: ") + transcoded + string("\n"); } text += '\n'; - + m_startoftext = text.size(); LOGDEB2(("MimeHandlerMail::processMsg:ismultipart %d mime subtype '%s'\n", doc->isMultipart(), doc->getSubType().c_str())); walkmime(doc, depth); diff --git a/src/internfile/mh_mail.h b/src/internfile/mh_mail.h index bfb757b7..7b88eb13 100644 --- a/src/internfile/mh_mail.h +++ b/src/internfile/mh_mail.h @@ -37,7 +37,7 @@ class MHMailAttach; * file. */ class MimeHandlerMail : public RecollFilter { - public: +public: MimeHandlerMail(const string &mt) : RecollFilter(mt), m_bincdoc(0), m_fd(-1), m_stream(0), m_idx(-1) {} @@ -53,15 +53,20 @@ class MimeHandlerMail : public RecollFilter { virtual bool skip_to_document(const string& ipath); virtual void clear(); - private: +private: bool processMsg(Binc::MimePart *doc, int depth); void walkmime(Binc::MimePart* doc, int depth); bool processAttach(); Binc::MimeDocument *m_bincdoc; int m_fd; std::stringstream *m_stream; - int m_idx; // starts at -1 for self, then index into - // attachments; + + // Current index in parts. starts at -1 for self, then index into + // attachments + int m_idx; + // Start of actual text (after the reprinted headers. This is for + // generating a semi-meaningful "abstract") + string::size_type m_startoftext; string m_subject; vector m_attachments; };