private @Nullable Message messageFromMapSms(Map<String, String> msgMap) throws MessagingException {
final String address = msgMap.get(Telephony.TextBasedSmsColumns.ADDRESS);
if (TextUtils.isEmpty(address)) return null;
PersonRecord record = personLookup.lookupPerson(address);
if (!includePersonInBackup(record, DataType.SMS)) return null;
final Message msg = new MimeMessage();
msg.setSubject(getSubject(DataType.SMS, record));
setBody(msg, new TextBody(msgMap.get(Telephony.TextBasedSmsColumns.BODY)));
final int messageType = toInt(msgMap.get(Telephony.TextBasedSmsColumns.TYPE));
if (Telephony.TextBasedSmsColumns.MESSAGE_TYPE_INBOX == messageType) {
msg.setFrom(record.getAddress(addressStyle));
msg.setRecipient(Message.RecipientType.TO, userAddress);
} else {
msg.setRecipient(Message.RecipientType.TO, record.getAddress(addressStyle));
msg.setFrom(userAddress);
}
Date sentDate;
try {
sentDate = new Date(Long.valueOf(msgMap.get(Telephony.TextBasedSmsColumns.DATE)));
} catch (NumberFormatException n) {
Log.e(TAG, ERROR_PARSING_DATE, n);
sentDate = new Date();
}
headerGenerator.setHeaders(msg, msgMap, DataType.SMS, address, record, sentDate, messageType);
return msg;
}