[Kde-pim] kmail + mdn reply + encoding
laurent Montel
montel at kde.org
Mon Jun 27 09:29:31 BST 2011
Hi,
Could you help me to fix bug in encoding ?
KMime::MDN::dispositionNotificationBodyContent returns a string which is not
encoding in utf-8 when I receive notification
in body I have:
"Le message envoyé le 27/06/2011 10:27 à montel at kde.org avec le sujet «Â
test mdn » a été affiché. Il n'est pas certain qu'il ait été lu ou
compris"
Could you give me info for fixing it please ?
thanks
regards
in messagefactory.cpp
KMime::Message::Ptr MessageFactory::createMDN( KMime::MDN::ActionMode a,
KMime::MDN::DispositionType d,
KMime::MDN::SendingMode s,
int mdnQuoteOriginal,
QList<KMime::MDN::DispositionModifier>
m )
{
// extract where to send to:
QString receiptTo = m_origMsg->headerByType("Disposition-Notification-To") ?
m_origMsg->headerByType("Disposition-Notification-To")->asUnicodeString() :
QString::fromLatin1("");
if( receiptTo.trimmed().isEmpty() ) return KMime::Message::Ptr( new
KMime::Message );
receiptTo.remove( QChar::fromLatin1('\n') );
QString special; // fill in case of error, warning or failure
// extract where to send from:
QString finalRecipient = m_identityManager->identityForUoidOrDefault(
identityUoid( m_origMsg ) ).fullEmailAddr();
//
// Generate message:
//
KMime::Message::Ptr receipt( new KMime::Message() );
const uint originalIdentity = identityUoid( m_origMsg );
MessageHelper::initFromMessage( receipt, m_origMsg, m_identityManager,
originalIdentity );
receipt->contentType()->from7BitString( "multipart/report" );
receipt->contentType()->setBoundary( KMime::multiPartBoundary() );
receipt->contentType()->setCharset( "us-ascii" );
receipt->removeHeader("Content-Transfer-Encoding");
// Modify the ContentType directly (replaces setAutomaticFields(true))
receipt->contentType()->setParameter( QString::fromLatin1("report-type"),
QString::fromLatin1("disposition-notification") );
QString description = replaceHeadersInString( m_origMsg,
KMime::MDN::descriptionFor( d, m ) );
// text/plain part:
KMime::Content* firstMsgPart = new KMime::Content( m_origMsg.get() );
firstMsgPart->contentType()->setMimeType( "text/plain" );
firstMsgPart->contentType()->setCharset( "us-ascii" );
firstMsgPart->contentTransferEncoding()->from7BitString( "7bit" );
firstMsgPart->setBody( description.toUtf8() );
receipt->addContent( firstMsgPart );
// message/disposition-notification part:
KMime::Content* secondMsgPart = new KMime::Content( m_origMsg.get() );
secondMsgPart->contentType()->setMimeType( "message/disposition-notification"
);
//secondMsgPart.setCharset( "us-ascii" );
secondMsgPart->contentTransferEncoding()->from7BitString( "7bit" );
secondMsgPart->setBody( KMime::MDN::dispositionNotificationBodyContent(
finalRecipient,
m_origMsg->headerByType("Original-Recipient") ?
m_origMsg->headerByType("Original-Recipient")->as7BitString() : "",
m_origMsg->messageID()->as7BitString(), /*
Message-ID */
d, a, s, m, special ) );
receipt->addContent( secondMsgPart );
if ( mdnQuoteOriginal < 0 || mdnQuoteOriginal > 2 ) mdnQuoteOriginal = 0;
/* 0=> Nothing, 1=>Full Message, 2=>HeadersOnly*/
KMime::Content* thirdMsgPart = new KMime::Content( m_origMsg.get() );
switch ( mdnQuoteOriginal ) {
case 1:
thirdMsgPart->contentType()->setMimeType( "message/rfc822" );
thirdMsgPart->setBody( MessageCore::StringUtil::asSendableString(
m_origMsg ) );
receipt->addContent( thirdMsgPart );
break;
case 2:
thirdMsgPart->contentType()->setMimeType( "text/rfc822-headers" );
thirdMsgPart->setBody( MessageCore::StringUtil::headerAsSendableString(
m_origMsg ) );
receipt->addContent( thirdMsgPart );
break;
case 0:
default:
break;
};
receipt->to()->fromUnicodeString( receiptTo, "utf-8" );
receipt->subject()->from7BitString( "Message Disposition Notification" );
KMime::Headers::InReplyTo *header = new KMime::Headers::InReplyTo(
receipt.get(), m_origMsg->messageID()->asUnicodeString(), "utf-8" );
receipt->setHeader( header );
receipt->references()->from7BitString( getRefStr( m_origMsg ) );
receipt->assemble();
kDebug() << "final message:" + receipt->encodedContent();
receipt->assemble();
return receipt;
}
_______________________________________________
KDE PIM mailing list kde-pim at kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/
More information about the kde-pim
mailing list