void QMessage::setBody(const QString &body, const QByteArray &mimeType) { QByteArray mainType("text"); QByteArray subType("plain"); QByteArray charset; QString mime = QString(mimeType); int index = mimeType.indexOf("/"); if (index != -1) { mainType = mimeType.left(index).trimmed(); subType = mimeType.mid(index + 1).trimmed(); index = subType.indexOf(";"); if (index != -1) { QString remainder = subType.mid(index + 1); subType = subType.left(index).trimmed(); QRegExp charsetPattern("charset=(\\S+)"); index = charsetPattern.indexIn(remainder); if (index != -1) { charset = charsetPattern.cap(1).toLatin1(); } } } if (charset.isEmpty()) { charset = QMessage::preferredCharsetFor(body); if (charset.isEmpty()) { charset = "UTF-8"; } } QMessageContentContainerPrivate *container(((QMessageContentContainer *)(this))->d_ptr); QMessageContentContainerId existingBodyId(bodyId()); if (existingBodyId.isValid()) { if (existingBodyId == QMessageContentContainerPrivate::bodyContentId()) { // The body content is in the message itself container->setContent(body, mainType, subType, charset); } else { // The body content is in the first attachment QMessageContentContainerPrivate *attachmentContainer(container->attachment(existingBodyId)->d_ptr); attachmentContainer->setContent(body, mainType, subType, charset); } } else { if (container->_attachments.isEmpty()) { // Put the content directly into the message container->setContent(body, mainType, subType, charset); d_ptr->_bodyId = QMessageContentContainerPrivate::bodyContentId(); } else { // Add the body as the first attachment QMessageContentContainer newBody; newBody.d_ptr->setContent(body, mainType, subType, charset); d_ptr->_bodyId = container->prependContent(newBody); } } d_ptr->_modified = true; }
void QMessage::setBody(const QString &bodyText, const QByteArray &mimeType) { QByteArray mainType("text"); QByteArray subType("plain"); QByteArray charset; int index = mimeType.indexOf("/"); if (index != -1) { mainType = mimeType.left(index).trimmed(); subType = mimeType.mid(index + 1).trimmed(); index = subType.indexOf(";"); if (index != -1) { QString remainder = subType.mid(index + 1); subType = subType.left(index).trimmed(); QRegExp charsetPattern("charset=(\\S+)"); index = charsetPattern.indexIn(remainder); if (index != -1) { charset = charsetPattern.cap(1).toLatin1(); } } } if (charset.isEmpty()) { charset = charsetFor(bodyText); } QMailMessageContentType ct; ct.setType(mainType); ct.setSubType(subType); ct.setCharset(charset); QMailMessageBody textBody(QMailMessageBody::fromData(bodyText, ct, QMailMessageBody::Base64)); if (d_ptr->_message.multipartType() == QMailMessage::MultipartNone) { // Replace the body with this data d_ptr->_message.setBody(textBody); } else { // Replace any existing text with this part TextPartLocator locator; d_ptr->_message.foreachPart<TextPartLocator&>(locator); if (locator._location.isValid()) { // Update the existing body text part to contain the new text QMailMessagePart &bodyPart = d_ptr->_message.partAt(locator._location); bodyPart.setBody(textBody); } else { // Insert the text as the new first part QMailMessageContentDisposition cd(QMailMessageContentDisposition::Inline); QMailMessagePart part(QMailMessagePart::fromData(bodyText, ct, cd, QMailMessageBody::Base64)); d_ptr->_message.prependPart(part); } } }