void EmailAdapter::ParseRecipients(const MojObject& recipients, Email& email) { MojErr err; EmailAddressListPtr to_list(new EmailAddressList); EmailAddressListPtr cc_list(new EmailAddressList); EmailAddressListPtr bcc_list(new EmailAddressList); MojObject::ConstArrayIterator it = recipients.arrayBegin(); for (; it != recipients.arrayEnd(); ++it) { const MojObject& recipient = *it; MojString type; err = recipient.getRequired(Part::TYPE, type); ErrorToException(err); EmailAddressPtr addr = ParseAddress(recipient); if(type.compareCaseless("to") == 0) to_list->push_back(addr); else if(type.compareCaseless("cc") == 0) cc_list->push_back(addr); else if(type.compareCaseless("bcc") == 0) bcc_list->push_back(addr); else // not a valid recipient type throw MailException("invalid recipient type", __FILE__, __LINE__); } email.SetTo(to_list); email.SetCc(cc_list); email.SetBcc(bcc_list); }
bool EmailHeaderFieldParser::ParseEmailHeaderField(Email& email, const string& fieldNameLower, const string& fieldValue) { if (fieldNameLower == "subject") { // decode subject string subject; ParseTextField(fieldValue, subject); email.SetSubject(subject); } else if (fieldNameLower == "date") { time_t date; ParseDateField(fieldValue, date); // Technically this is the date sent, not received email.SetDateReceived( MojInt64(date) * 1000L); } else if (fieldNameLower == "from" || fieldNameLower == "reply-to" || fieldNameLower == "to" || fieldNameLower == "cc" || fieldNameLower == "bcc") { EmailAddressListPtr addressListPtr(new EmailAddressList()); ParseAddressListField(fieldValue, *addressListPtr); if (fieldNameLower == "to") { email.SetTo(addressListPtr); } else if (fieldNameLower == "cc") { email.SetCc(addressListPtr); } else if (fieldNameLower == "bcc") { email.SetBcc(addressListPtr); } else if (fieldNameLower == "from") { // get first address if (!addressListPtr->empty()) { email.SetFrom(addressListPtr->at(0)); } } else if (fieldNameLower == "reply-to") { // get first address if (!addressListPtr->empty()) { email.SetReplyTo(addressListPtr->at(0)); } } } else if (fieldNameLower == "in-reply-to") { email.SetInReplyTo( StringUtils::GetSanitizedASCII(fieldValue) ); } else if (fieldNameLower == "x-priority") { if(fieldValue == "1" || fieldValue == "2") { email.SetPriority(Email::Priority_High); } else if (fieldValue == "4" || fieldValue == "5") { email.SetPriority(Email::Priority_Low); } } else { // no match return false; } return true; }