Loading app/core/src/main/java/com/fsck/k9/autocrypt/AutocryptTransferMessageCreator.kt +1 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ class AutocryptTransferMessageCreator(private val stringProvider: AutocryptStrin message.internalDate = nowDate message.addSentDate(nowDate, K9.hideTimeZone()) message.setFrom(address) message.setRecipients(RecipientType.TO, arrayOf(address)) message.setHeader("To", address.toEncodedString()) return message } catch (e: MessagingException) { Loading app/core/src/main/java/com/fsck/k9/mailstore/LocalMessage.java +22 −34 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Flag; import com.fsck.k9.mail.Folder; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.internet.AddressHeaderBuilder; import com.fsck.k9.mail.internet.MimeMessage; import com.fsck.k9.mail.message.MessageHeaderParser; import com.fsck.k9.mailstore.LockableDatabase.DbCallback; Loading Loading @@ -80,9 +81,10 @@ public class LocalMessage extends MimeMessage { } } this.databaseId = cursor.getLong(LocalStore.MSG_INDEX_ID); this.setRecipients(RecipientType.TO, Address.unpack(cursor.getString(LocalStore.MSG_INDEX_TO))); this.setRecipients(RecipientType.CC, Address.unpack(cursor.getString(LocalStore.MSG_INDEX_CC))); this.setRecipients(RecipientType.BCC, Address.unpack(cursor.getString(LocalStore.MSG_INDEX_BCC))); mTo = getAddressesOrNull(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_TO))); mCc = getAddressesOrNull(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_CC))); mBcc = getAddressesOrNull(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_BCC))); headerNeedsUpdating = true; this.setReplyTo(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_REPLY_TO))); this.attachmentCount = cursor.getInt(LocalStore.MSG_INDEX_ATTACHMENT_COUNT); Loading Loading @@ -210,36 +212,12 @@ public class LocalMessage extends MimeMessage { headerNeedsUpdating = true; } /* * For performance reasons, we add headers instead of setting them (see super implementation) * which removes (expensive) them before adding them */ @Override public void setRecipients(RecipientType type, Address[] addresses) { if (type == RecipientType.TO) { if (addresses == null || addresses.length == 0) { this.mTo = null; } else { this.mTo = addresses; } } else if (type == RecipientType.CC) { if (addresses == null || addresses.length == 0) { this.mCc = null; } else { this.mCc = addresses; } } else if (type == RecipientType.BCC) { private Address[] getAddressesOrNull(Address[] addresses) { if (addresses == null || addresses.length == 0) { this.mBcc = null; } else { this.mBcc = addresses; } return null; } else { throw new IllegalArgumentException("Unrecognized recipient type."); return addresses; } headerNeedsUpdating = true; } public void setFlagInternal(Flag flag, boolean set) throws MessagingException { Loading Loading @@ -444,9 +422,10 @@ public class LocalMessage extends MimeMessage { private void updateHeader() { super.setSubject(subject); super.setReplyTo(mReplyTo); super.setRecipients(RecipientType.TO, mTo); super.setRecipients(RecipientType.CC, mCc); super.setRecipients(RecipientType.BCC, mBcc); setRecipients("To", mTo); setRecipients("CC", mCc); setRecipients("BCC", mBcc); if (mFrom != null && mFrom.length > 0) { super.setFrom(mFrom[0]); Loading @@ -459,6 +438,15 @@ public class LocalMessage extends MimeMessage { headerNeedsUpdating = false; } private void setRecipients(String headerName, Address[] addresses) { if (addresses == null || addresses.length == 0) { removeHeader(headerName); } else { String headerValue = AddressHeaderBuilder.createHeaderValue(addresses); setHeader(headerName, headerValue); } } @Override public boolean equals(Object o) { if (this == o) { Loading app/core/src/main/java/com/fsck/k9/message/MessageBuilder.java +13 −5 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ import android.content.Intent; import android.os.AsyncTask; import com.fsck.k9.CoreResourceProvider; import com.fsck.k9.mail.internet.AddressHeaderBuilder; import com.fsck.k9.mail.internet.Headers; import timber.log.Timber; Loading @@ -21,7 +22,6 @@ import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Body; import com.fsck.k9.mail.BoundaryGenerator; import com.fsck.k9.mail.Flag; import com.fsck.k9.mail.Message.RecipientType; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.internet.MessageIdGenerator; import com.fsck.k9.mail.internet.MimeBodyPart; Loading Loading @@ -95,9 +95,10 @@ public abstract class MessageBuilder { message.addSentDate(sentDate, hideTimeZone); Address from = new Address(identity.getEmail(), identity.getName()); message.setFrom(from); message.setRecipients(RecipientType.TO, to); message.setRecipients(RecipientType.CC, cc); message.setRecipients(RecipientType.BCC, bcc); setRecipients(message, "To", to); setRecipients(message, "CC", cc); setRecipients(message, "BCC", bcc); message.setSubject(subject); if (requestReadReceipt) { Loading Loading @@ -134,6 +135,13 @@ public abstract class MessageBuilder { } } private void setRecipients(MimeMessage message, String headerName, Address[] addresses) { if (addresses != null && addresses.length > 0) { String headerValue = AddressHeaderBuilder.createHeaderValue(addresses); message.setHeader(headerName, headerValue); } } protected MimeMultipart createMimeMultipart() { String boundary = boundaryGenerator.generateBoundary(); return new MimeMultipart(boundary); Loading app/core/src/test/java/com/fsck/k9/helper/IdentityHelperTest.kt +12 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import com.fsck.k9.RobolectricTest import com.fsck.k9.mail.Address import com.fsck.k9.mail.Message import com.fsck.k9.mail.Message.RecipientType import com.fsck.k9.mail.internet.AddressHeaderBuilder import com.fsck.k9.mail.internet.MimeMessage import com.google.common.truth.Truth.assertThat import org.junit.Test Loading Loading @@ -128,11 +129,21 @@ class IdentityHelperTest : RobolectricTest() { private fun messageWithRecipients(vararg recipients: Pair<RecipientType, String>): Message { return MimeMessage().apply { for ((recipientType, email) in recipients) { setRecipients(recipientType, arrayOf(Address(email))) val headerName = recipientType.toHeaderName() addHeader(headerName, AddressHeaderBuilder.createHeaderValue(arrayOf(Address(email)))) } } } private fun RecipientType.toHeaderName() = when (this) { RecipientType.TO -> "To" RecipientType.CC -> "Cc" RecipientType.BCC -> "Bcc" RecipientType.X_ORIGINAL_TO -> "X-Original-To" RecipientType.DELIVERED_TO -> "Delivered-To" RecipientType.X_ENVELOPE_TO -> "X-Envelope-To" } companion object { const val DEFAULT_ADDRESS = "default@example.org" const val IDENTITY_1_ADDRESS = "identity1@example.org" Loading app/core/src/test/java/com/fsck/k9/mailstore/K9BackendFolderTest.kt +1 −2 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ import com.fsck.k9.backend.api.FolderInfo import com.fsck.k9.mail.Address import com.fsck.k9.mail.Flag import com.fsck.k9.mail.Folder.FolderType import com.fsck.k9.mail.Message import com.fsck.k9.mail.internet.MimeMessage import com.fsck.k9.mail.internet.MimeMessageHelper import com.fsck.k9.mail.internet.TextBody Loading Loading @@ -101,7 +100,7 @@ class K9BackendFolderTest : K9RobolectricTest() { val message = MimeMessage().apply { subject = "Test message" setFrom(Address("alice@domain.example")) setRecipient(Message.RecipientType.TO, Address("bob@domain.example")) setHeader("To", "bob@domain.example") MimeMessageHelper.setBody(this, TextBody("Hello Bob!")) uid = messageServerId Loading Loading
app/core/src/main/java/com/fsck/k9/autocrypt/AutocryptTransferMessageCreator.kt +1 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ class AutocryptTransferMessageCreator(private val stringProvider: AutocryptStrin message.internalDate = nowDate message.addSentDate(nowDate, K9.hideTimeZone()) message.setFrom(address) message.setRecipients(RecipientType.TO, arrayOf(address)) message.setHeader("To", address.toEncodedString()) return message } catch (e: MessagingException) { Loading
app/core/src/main/java/com/fsck/k9/mailstore/LocalMessage.java +22 −34 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Flag; import com.fsck.k9.mail.Folder; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.internet.AddressHeaderBuilder; import com.fsck.k9.mail.internet.MimeMessage; import com.fsck.k9.mail.message.MessageHeaderParser; import com.fsck.k9.mailstore.LockableDatabase.DbCallback; Loading Loading @@ -80,9 +81,10 @@ public class LocalMessage extends MimeMessage { } } this.databaseId = cursor.getLong(LocalStore.MSG_INDEX_ID); this.setRecipients(RecipientType.TO, Address.unpack(cursor.getString(LocalStore.MSG_INDEX_TO))); this.setRecipients(RecipientType.CC, Address.unpack(cursor.getString(LocalStore.MSG_INDEX_CC))); this.setRecipients(RecipientType.BCC, Address.unpack(cursor.getString(LocalStore.MSG_INDEX_BCC))); mTo = getAddressesOrNull(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_TO))); mCc = getAddressesOrNull(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_CC))); mBcc = getAddressesOrNull(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_BCC))); headerNeedsUpdating = true; this.setReplyTo(Address.unpack(cursor.getString(LocalStore.MSG_INDEX_REPLY_TO))); this.attachmentCount = cursor.getInt(LocalStore.MSG_INDEX_ATTACHMENT_COUNT); Loading Loading @@ -210,36 +212,12 @@ public class LocalMessage extends MimeMessage { headerNeedsUpdating = true; } /* * For performance reasons, we add headers instead of setting them (see super implementation) * which removes (expensive) them before adding them */ @Override public void setRecipients(RecipientType type, Address[] addresses) { if (type == RecipientType.TO) { if (addresses == null || addresses.length == 0) { this.mTo = null; } else { this.mTo = addresses; } } else if (type == RecipientType.CC) { if (addresses == null || addresses.length == 0) { this.mCc = null; } else { this.mCc = addresses; } } else if (type == RecipientType.BCC) { private Address[] getAddressesOrNull(Address[] addresses) { if (addresses == null || addresses.length == 0) { this.mBcc = null; } else { this.mBcc = addresses; } return null; } else { throw new IllegalArgumentException("Unrecognized recipient type."); return addresses; } headerNeedsUpdating = true; } public void setFlagInternal(Flag flag, boolean set) throws MessagingException { Loading Loading @@ -444,9 +422,10 @@ public class LocalMessage extends MimeMessage { private void updateHeader() { super.setSubject(subject); super.setReplyTo(mReplyTo); super.setRecipients(RecipientType.TO, mTo); super.setRecipients(RecipientType.CC, mCc); super.setRecipients(RecipientType.BCC, mBcc); setRecipients("To", mTo); setRecipients("CC", mCc); setRecipients("BCC", mBcc); if (mFrom != null && mFrom.length > 0) { super.setFrom(mFrom[0]); Loading @@ -459,6 +438,15 @@ public class LocalMessage extends MimeMessage { headerNeedsUpdating = false; } private void setRecipients(String headerName, Address[] addresses) { if (addresses == null || addresses.length == 0) { removeHeader(headerName); } else { String headerValue = AddressHeaderBuilder.createHeaderValue(addresses); setHeader(headerName, headerValue); } } @Override public boolean equals(Object o) { if (this == o) { Loading
app/core/src/main/java/com/fsck/k9/message/MessageBuilder.java +13 −5 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ import android.content.Intent; import android.os.AsyncTask; import com.fsck.k9.CoreResourceProvider; import com.fsck.k9.mail.internet.AddressHeaderBuilder; import com.fsck.k9.mail.internet.Headers; import timber.log.Timber; Loading @@ -21,7 +22,6 @@ import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Body; import com.fsck.k9.mail.BoundaryGenerator; import com.fsck.k9.mail.Flag; import com.fsck.k9.mail.Message.RecipientType; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.internet.MessageIdGenerator; import com.fsck.k9.mail.internet.MimeBodyPart; Loading Loading @@ -95,9 +95,10 @@ public abstract class MessageBuilder { message.addSentDate(sentDate, hideTimeZone); Address from = new Address(identity.getEmail(), identity.getName()); message.setFrom(from); message.setRecipients(RecipientType.TO, to); message.setRecipients(RecipientType.CC, cc); message.setRecipients(RecipientType.BCC, bcc); setRecipients(message, "To", to); setRecipients(message, "CC", cc); setRecipients(message, "BCC", bcc); message.setSubject(subject); if (requestReadReceipt) { Loading Loading @@ -134,6 +135,13 @@ public abstract class MessageBuilder { } } private void setRecipients(MimeMessage message, String headerName, Address[] addresses) { if (addresses != null && addresses.length > 0) { String headerValue = AddressHeaderBuilder.createHeaderValue(addresses); message.setHeader(headerName, headerValue); } } protected MimeMultipart createMimeMultipart() { String boundary = boundaryGenerator.generateBoundary(); return new MimeMultipart(boundary); Loading
app/core/src/test/java/com/fsck/k9/helper/IdentityHelperTest.kt +12 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import com.fsck.k9.RobolectricTest import com.fsck.k9.mail.Address import com.fsck.k9.mail.Message import com.fsck.k9.mail.Message.RecipientType import com.fsck.k9.mail.internet.AddressHeaderBuilder import com.fsck.k9.mail.internet.MimeMessage import com.google.common.truth.Truth.assertThat import org.junit.Test Loading Loading @@ -128,11 +129,21 @@ class IdentityHelperTest : RobolectricTest() { private fun messageWithRecipients(vararg recipients: Pair<RecipientType, String>): Message { return MimeMessage().apply { for ((recipientType, email) in recipients) { setRecipients(recipientType, arrayOf(Address(email))) val headerName = recipientType.toHeaderName() addHeader(headerName, AddressHeaderBuilder.createHeaderValue(arrayOf(Address(email)))) } } } private fun RecipientType.toHeaderName() = when (this) { RecipientType.TO -> "To" RecipientType.CC -> "Cc" RecipientType.BCC -> "Bcc" RecipientType.X_ORIGINAL_TO -> "X-Original-To" RecipientType.DELIVERED_TO -> "Delivered-To" RecipientType.X_ENVELOPE_TO -> "X-Envelope-To" } companion object { const val DEFAULT_ADDRESS = "default@example.org" const val IDENTITY_1_ADDRESS = "identity1@example.org" Loading
app/core/src/test/java/com/fsck/k9/mailstore/K9BackendFolderTest.kt +1 −2 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ import com.fsck.k9.backend.api.FolderInfo import com.fsck.k9.mail.Address import com.fsck.k9.mail.Flag import com.fsck.k9.mail.Folder.FolderType import com.fsck.k9.mail.Message import com.fsck.k9.mail.internet.MimeMessage import com.fsck.k9.mail.internet.MimeMessageHelper import com.fsck.k9.mail.internet.TextBody Loading Loading @@ -101,7 +100,7 @@ class K9BackendFolderTest : K9RobolectricTest() { val message = MimeMessage().apply { subject = "Test message" setFrom(Address("alice@domain.example")) setRecipient(Message.RecipientType.TO, Address("bob@domain.example")) setHeader("To", "bob@domain.example") MimeMessageHelper.setBody(this, TextBody("Hello Bob!")) uid = messageServerId Loading