[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