Beispiel #1
0
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;
}