diff options
author | Vincent Richard <[email protected]> | 2013-02-08 13:23:48 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2013-02-08 13:23:48 +0000 |
commit | 173c665e0cefde28ef37034a36031aab96c64ae7 (patch) | |
tree | 0b8753efa69abf06b7b75edbcc16c70b16a4ae79 | |
parent | Fixed linking with pthread library. (diff) | |
download | vmime-173c665e0cefde28ef37034a36031aab96c64ae7.tar.gz vmime-173c665e0cefde28ef37034a36031aab96c64ae7.zip |
Additional MDN fields (thanks to Mehmet Bozkurt).
-rw-r--r-- | src/mdn/MDNHelper.cpp | 43 | ||||
-rw-r--r-- | vmime/mdn/MDNHelper.hpp | 9 |
2 files changed, 46 insertions, 6 deletions
diff --git a/src/mdn/MDNHelper.cpp b/src/mdn/MDNHelper.cpp index ff5924b1..533813b1 100644 --- a/src/mdn/MDNHelper.cpp +++ b/src/mdn/MDNHelper.cpp @@ -66,7 +66,7 @@ const std::vector <sendableMDNInfos> MDNHelper::getPossibleMDNs(const ref <const const mailboxList& dnto = *hdr->DispositionNotificationTo()->getValue() .dynamicCast <const mailboxList>(); - for (int i = 0 ; i < dnto.getMailboxCount() ; ++i) + for (size_t i = 0 ; i < dnto.getMailboxCount() ; ++i) result.push_back(sendableMDNInfos(msg, *dnto.getMailboxAt(i))); } @@ -151,7 +151,8 @@ ref <message> MDNHelper::buildMDN(const sendableMDNInfos& mdnInfos, const mailbox& expeditor, const disposition& dispo, const string& reportingUA, - const std::vector <string>& reportingUAProducts) + const std::vector <string>& reportingUAProducts, + const std::map <string, string>& fields) { // Create a new message ref <message> msg = vmime::create <message>(); @@ -178,7 +179,7 @@ ref <message> MDNHelper::buildMDN(const sendableMDNInfos& mdnInfos, msg->getBody()->appendPart(createFirstMDNPart(mdnInfos, text, ch)); msg->getBody()->appendPart(createSecondMDNPart(mdnInfos, - dispo, reportingUA, reportingUAProducts)); + dispo, reportingUA, reportingUAProducts, fields)); msg->getBody()->appendPart(createThirdMDNPart(mdnInfos)); return (msg); @@ -208,7 +209,8 @@ ref <bodyPart> MDNHelper::createFirstMDNPart(const sendableMDNInfos& /* mdnInfos ref <bodyPart> MDNHelper::createSecondMDNPart(const sendableMDNInfos& mdnInfos, const disposition& dispo, const string& reportingUA, - const std::vector <string>& reportingUAProducts) + const std::vector <string>& reportingUAProducts, + const std::map <string, string>& additionalFields) { ref <bodyPart> part = vmime::create <bodyPart>(); @@ -281,6 +283,39 @@ ref <bodyPart> MDNHelper::createSecondMDNPart(const sendableMDNInfos& mdnInfos, // -- Disposition fields.Disposition()->setValue(dispo); + // -- Failure, Error and Warning fields + std::map <string, string>::const_iterator it; + + if (additionalFields.size() > 0) + { + it = additionalFields.find(vmime::fields::ERROR); + if (it != additionalFields.end()) + { + ref <headerField> error = headerFieldFactory::getInstance()-> + create(vmime::fields::ERROR); + error->setValue(it->second); + fields.appendField(error); + } + + it = additionalFields.find(vmime::fields::WARNING); + if (it != additionalFields.end()) + { + ref <headerField> warn = headerFieldFactory::getInstance()-> + create(vmime::fields::WARNING); + warn->setValue(it->second); + fields.appendField(warn); + } + + it = additionalFields.find(vmime::fields::FAILURE); + if (it != additionalFields.end()) + { + ref <headerField> fail = headerFieldFactory::getInstance()-> + create(vmime::fields::FAILURE); + fail->setValue(it->second); + fields.appendField(fail); + } + } + std::ostringstream oss; utility::outputStreamAdapter vos(oss); diff --git a/vmime/mdn/MDNHelper.hpp b/vmime/mdn/MDNHelper.hpp index 4e2027ca..d06c47ce 100644 --- a/vmime/mdn/MDNHelper.hpp +++ b/vmime/mdn/MDNHelper.hpp @@ -102,6 +102,7 @@ public: * @param dispo disposition information * @param reportingUA name of reporting user-agent (optional) * @param reportingUAProducts list of products in the reporting user-agent (optional) + * @param fields additional MDN fields, like "Error", "Warning" or "Failure" (optional) * @return a new message object containing the MDN */ static ref <message> buildMDN(const sendableMDNInfos& mdnInfos, @@ -111,7 +112,9 @@ public: const disposition& dispo, const string& reportingUA = NULL_STRING, const std::vector <string>& reportingUAProducts - = std::vector <string>()); + = std::vector <string>(), + const std::map <string, string>& fields + = (std::map <string, string>())); private: @@ -121,7 +124,9 @@ private: static ref <bodyPart> createSecondMDNPart(const sendableMDNInfos& mdnInfos, const disposition& dispo, const string& reportingUA, - const std::vector <string>& reportingUAProducts); + const std::vector <string>& reportingUAProducts, + const std::map <string, string>& fields); + static ref <bodyPart> createThirdMDNPart(const sendableMDNInfos& mdnInfos); }; |