void MessageWithAttachments::SetText(const DwString& aStr) { // Create a body part and set the necessary fields MultipartBodyPart part; part.SetType(DwMime::kTypeText); part.SetSubtype(DwMime::kSubtypePlain); part.SetCte(DwMime::kCte7bit); // Set the string as the body of the body part part.SetBody(aStr); // Set this body part as the first one SetBodyPart(0, part); }
void MessageWithAttachments::AttachBinaryFile(const char* aFilename, int aType, int aSubtype) { // Get the file contents DwString str; PutFileInString(aFilename, str); // Encode using base64 encoding DwString encStr; DwEncodeBase64(str, encStr); // Create a body part and set the necessary fields MultipartBodyPart part; part.SetType(aType); part.SetSubtype(aSubtype); part.SetCte(DwMime::kCteBase64); // Set content-disposition to attachment, with filename parameter // (see RFC-1806 for information on this *experimental* header field) DwString contDisp = "attachment; filename="; contDisp += '\"'; contDisp += aFilename; contDisp += '\"'; part.SetContentDisposition(contDisp); // Set the encoded file contents as the body of the body part part.SetBody(encStr); // Make sure this is not the first part, since that is reserved for // the text if (NumberOfParts() == 0) { SetBodyPart(1, part); } else { AddBodyPart(part); } }
void MultipartMessage::BodyPart(int aIdx, MultipartBodyPart& aPart) { // Get the DwBodyPart for this index DwBodyPart* part = mMessage->Body().FirstBodyPart(); for (int curIdx=0; curIdx < aIdx && part; ++curIdx) { part = part->Next(); } // If the DwBodyPart was found get the header fields and body if (part != 0) { DwHeaders& headers = part->Headers(); // Content-type if (headers.HasContentType()) { const DwString& type = headers.ContentType().TypeStr(); const DwString& subtype = headers.ContentType().SubtypeStr(); aPart.SetTypeStr(type); aPart.SetSubtypeStr(subtype); } else { // Set to defaults aPart.SetTypeStr("Text"); aPart.SetSubtypeStr("Plain"); } // Content-transfer-encoding if (headers.HasContentTransferEncoding()) { const DwString& cte = headers.ContentTransferEncoding().AsString(); aPart.SetCteStr(cte); } else { // Set to default aPart.SetCteStr("7bit"); } // Content-description if (headers.HasContentDescription()) { const DwString& desc = headers.ContentDescription().AsString(); aPart.SetContentDescription(desc); } else { aPart.SetContentDescription(""); } // Content-disposition if (headers.HasContentDisposition()) { const DwString& disp = headers.ContentDisposition().AsString(); aPart.SetContentDisposition(disp); } else { aPart.SetContentDisposition(""); } // Body const DwString& body = part->Body().AsString(); aPart.SetBody(body); } // If the body part was not found, set all MultipartBodyPart attributes // to empty values. This only happens if you don't pay attention to // the value returned from NumberOfParts(). else { aPart.SetTypeStr(""); aPart.SetSubtypeStr(""); aPart.SetCteStr(""); aPart.SetContentDescription(""); aPart.SetContentDisposition(""); aPart.SetBody(""); } }