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 ); }
QMailMessage EmailComposerInterface::message() const { QMailMessage mail; if( isEmpty() ) return mail; QList<AttachmentItem*> attachments = m_composer->addAttDialog()->attachedFiles(); QString messageText( m_composer->toPlainText() ); QMailMessageContentType type("text/plain; charset=UTF-8"); if(attachments.isEmpty()) { mail.setBody( QMailMessageBody::fromData( messageText, type, QMailMessageBody::Base64 ) ); } else { QMailMessagePart textPart; textPart.setBody(QMailMessageBody::fromData(messageText.toUtf8(), type, QMailMessageBody::Base64)); mail.setMultipartType(QMailMessagePartContainer::MultipartMixed); mail.appendPart(textPart); foreach (AttachmentItem* current, attachments) { const QContent& doc( current->document() ); QString fileName( doc.fileName() ); QFileInfo fi( fileName ); QString partName( fi.fileName() ); fileName = fi.absoluteFilePath(); QString content( doc.type() ); if (content.isEmpty()) content = QMimeType( fileName ).id(); QMailMessageContentType type( content.toLatin1() ); type.setName( partName.toLatin1() ); QMailMessageContentDisposition disposition( QMailMessageContentDisposition::Attachment ); disposition.setFilename( partName.toLatin1() ); QMailMessagePart part; if ((current->action() != QMailMessage::LinkToAttachments) || (fileName.startsWith(Qtopia::tempDir()))) { // This file is temporary - extract the data and create a part from that QFile dataFile(fileName); if (dataFile.open(QIODevice::ReadOnly)) { QDataStream in(&dataFile); part = QMailMessagePart::fromStream(in, disposition, type, QMailMessageBody::Base64, QMailMessageBody::RequiresEncoding); } else { qWarning() << "Unable to open temporary file:" << fileName; } } else { part = QMailMessagePart::fromFile(fileName, disposition, type, QMailMessageBody::Base64, QMailMessageBody::RequiresEncoding); } mail.appendPart(part); } } mail.setMessageType( QMailMessage::Email ); return mail; }