bool WriteMail::buildMail(bool includeSignature) { QMailAccountId accountId(m_accountSelection->itemData(m_accountSelection->currentIndex()).value<QMailAccountId>()); // Ensure the signature of the selected account is used if (accountId.isValid() && includeSignature) { m_composerInterface->setSignature(signature(accountId)); } // Extract the message from the composer QMailMessage newMail = m_composerInterface->message(); // Retain the old mail properties if they're configured newMail.setId(mail.id()); newMail.setParentFolderId(mail.parentFolderId()); newMail.setContentScheme(mail.contentScheme()); newMail.setContentIdentifier(mail.contentIdentifier()); newMail.setServerUid(mail.serverUid()); newMail.setCustomFields(mail.customFields()); newMail.setDate(QMailTimeStamp::currentDateTime()); newMail.setStatus(QMailMessage::Outgoing, true); newMail.setStatus(QMailMessage::ContentAvailable, true); newMail.setStatus(QMailMessage::PartialContentAvailable, true); newMail.setStatus(QMailMessage::Read, true); if (accountId.isValid()) { newMail.setParentAccountId(accountId); newMail.setFrom(QMailAccount(accountId).fromAddress()); } if (!newMail.parentFolderId().isValid()) { newMail.setParentFolderId(QMailFolder::LocalStorageFolderId); } if (m_precursorId.isValid()) { newMail.setInResponseTo(m_precursorId); newMail.setResponseType(m_replyAction); QMailMessage precursor(m_precursorId); // Set the In-Reply-To and References headers in our outgoing message QString references(precursor.headerFieldText("References")); if (references.isEmpty()) { references = precursor.headerFieldText("In-Reply-To"); } QString precursorId(precursor.headerFieldText("Message-ID")); if (!precursorId.isEmpty()) { newMail.setHeaderField("In-Reply-To", precursorId); if (!references.isEmpty()) { references.append(' '); } references.append(precursorId); } if (!references.isEmpty()) { // TODO: Truncate references if they're too long newMail.setHeaderField("References", references); } } mail = newMail; return true; }
void tst_QMailMessagePart::testSerialization() { QByteArray data; QByteArray type; type = "text/plain; charset=us-ascii"; data = "P1: This is a plain text part."; QMailMessagePart p1; p1.setBody(QMailMessageBody::fromData(data, QMailMessageContentType(type), QMailMessageBody::SevenBit, QMailMessageBody::RequiresEncoding)); p1.setContentID("P1"); p1.setContentLocation("After the header"); p1.setContentDescription("The first part"); QCOMPARE( p1.contentType().toString().toLower(), QByteArray("Content-Type: text/plain; charset=us-ascii").toLower() ); QCOMPARE( p1.transferEncoding(), QMailMessageBody::SevenBit ); type = "text/html; charset=UTF-8"; data = "<html>P2: This is a HTML part</html>"; QMailMessageContentType ct(type); ct.setName("P2"); QMailMessageContentDisposition cd(QMailMessageContentDisposition::Inline); cd.setFilename("p2.html"); QMailMessagePart p2; p2.setBody(QMailMessageBody::fromData(data, ct, QMailMessageBody::EightBit, QMailMessageBody::RequiresEncoding)); p2.setContentDisposition(cd); QCOMPARE( p2.contentType().toString().toLower(), QByteArray("Content-Type: text/html; charset=UTF-8; name=P2").toLower() ); QCOMPARE( p2.transferEncoding(), QMailMessageBody::EightBit ); QMailMessage m; m.setTo(QMailAddress("*****@*****.**")); m.setFrom(QMailAddress("*****@*****.**")); m.setDate(QMailTimeStamp("Fri, 22 Jun 2007 11:34:47 +1000")); m.setMultipartType(QMailMessagePartContainer::MultipartAlternative); m.appendPart(p1); m.appendPart(p2); QCOMPARE( m.contentType().toString().toLower(), QByteArray("Content-Type: multipart/alternative").toLower() ); QCOMPARE( m.transferEncoding(), QMailMessageBody::NoEncoding ); const QByteArray expected( "To: [email protected]" CRLF "From: [email protected]" CRLF "Date: Fri, 22 Jun 2007 11:34:47 +1000" CRLF "Content-Type: multipart/alternative; boundary=\"" BOUNDARY "\"" CRLF "MIME-Version: 1.0" CRLF CRLF "This is a multipart message in Mime 1.0 format" CRLF CRLF "--" BOUNDARY CRLF "Content-Type: text/plain; charset=us-ascii" CRLF "Content-Transfer-Encoding: 7bit" CRLF "Content-ID: <P1>" CRLF "Content-Location: After the header" CRLF "Content-Description: The first part" CRLF CRLF "P1: This is a plain text part." CRLF "--" BOUNDARY CRLF "Content-Type: text/html; charset=utf-8; name=P2" CRLF "Content-Transfer-Encoding: 8bit" CRLF "Content-Disposition: inline; filename=p2.html" CRLF CRLF "<html>P2: This is a HTML part</html>" CRLF "--" BOUNDARY "--" CRLF ); QByteArray serialized = m.toRfc2822(); QCOMPARE( serialized, expected ); QMailMessage m2 = QMailMessage::fromRfc2822(serialized); QByteArray repeat = m.toRfc2822(); QCOMPARE( serialized, repeat ); }