void tst_QMailMessagePart::testToRfc2822() { QMailMessagePart body = QMailMessagePart::fromData (QStringLiteral("Some body text"), QMailMessageContentDisposition(), QMailMessageContentType("text/plain"), QMailMessageBody::QuotedPrintable); QMailMessagePart disposition = QMailMessagePart::fromData (QByteArray(), QMailMessageContentDisposition(), QMailMessageContentType("message/disposition-notification"), QMailMessageBody::NoEncoding); disposition.setHeaderField("Original-Recipient", "*****@*****.**"); disposition.setHeaderField("Original-Message-ID", "123456789"); QMailMessagePart alt = QMailMessagePart::fromData (QByteArray(), QMailMessageContentDisposition(), QMailMessageContentType(), QMailMessageBodyFwd::NoEncoding); alt.setMultipartType(QMailMessagePartContainer::MultipartAlternative); alt.appendPart(body); alt.appendPart(disposition); const QByteArray expected( "Content-Type: multipart/alternative; boundary=\"[}<}]\"" CRLF "Content-Disposition:" CRLF CRLF CRLF "--[}<}]" CRLF "Content-Type: text/plain" CRLF "Content-Transfer-Encoding: quoted-printable" CRLF "Content-Disposition:" CRLF CRLF "Some body text" CRLF "--[}<}]" CRLF "Content-Type: message/disposition-notification" CRLF "Content-Disposition:" CRLF "Original-Recipient: [email protected]" CRLF "Original-Message-ID: 123456789" CRLF CRLF CRLF "--[}<}]--" CRLF ); const QByteArray serialized = alt.toRfc2822(); QCOMPARE( serialized, expected ); }
QMailCryptoFwd::SignatureResult QMailCryptoSMIME::sign(QMailMessagePartContainer &part, const QStringList &keys) const { QByteArray signedData, micalg; QMailCryptoFwd::SignatureResult result; result = computeSignature(part, keys, signedData, micalg); if (result != QMailCryptoFwd::SignatureValid) return result; // Set it to multipart/signed content-type. QList<QMailMessageHeaderField::ParameterType> parameters; parameters << QMailMessageHeaderField::ParameterType("micalg", micalg); parameters << QMailMessageHeaderField::ParameterType("protocol", "application/pkcs7-signature"); part.setMultipartType(QMailMessagePartContainerFwd::MultipartSigned, parameters); // Write the signature data in the second part. QMailMessagePart &signature = part.partAt(1); QMailMessageContentDisposition disposition; disposition.setType(QMailMessageContentDispositionFwd::Attachment); disposition.setFilename("smime.p7s"); signature.setContentDisposition(disposition); signature.setBody(QMailMessageBody::fromData(signedData, QMailMessageContentType("application/pkcs7-signature"), QMailMessageBodyFwd::Base64)); return QMailCryptoFwd::SignatureValid; }
void tst_QMailMessageBody::fromQString() { QFETCH( QString, input ); QFETCH( QByteArray, type ); QFETCH( QMailMessageBody::TransferEncoding, encoding ); QMailMessageBody body = QMailMessageBody::fromData( input, QMailMessageContentType( type ), encoding ); QTEST( body.data( QMailMessageBody::Encoded ), "encoded" ); QTEST( body.data(), "decoded" ); }
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 ); }