From 7ac7fe2cfecbbd93e1150df10fb4cee69c11d6db Mon Sep 17 00:00:00 2001 From: Mike Perry Date: Mon, 26 May 2014 14:56:28 -0700 Subject: [PATCH 1/4] Issue 3559: Use From or ReplyTo hostname in Message-ID if available. I wrote this fix to avoid obviously specifying that I am using a mobile device to reply to an email. Others want this for ease of filtering messages from their host by Message-ID. --- src/com/fsck/k9/mail/internet/MimeMessage.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/com/fsck/k9/mail/internet/MimeMessage.java b/src/com/fsck/k9/mail/internet/MimeMessage.java index d80b7bb22..c37abe02d 100644 --- a/src/com/fsck/k9/mail/internet/MimeMessage.java +++ b/src/com/fsck/k9/mail/internet/MimeMessage.java @@ -313,7 +313,22 @@ public class MimeMessage extends Message { } private String generateMessageId() { - return "<" + UUID.randomUUID().toString() + "@email.android.com>"; + String hostname = null; + if (mFrom != null) { + int hostIdx = mFrom[0].getAddress().lastIndexOf("@"); + hostname = mFrom[0].getAddress().substring(hostIdx); + } + + if (hostname == null && mReplyTo != null) { + int hostIdx = mReplyTo[0].getAddress().lastIndexOf("@"); + hostname = mReplyTo[0].getAddress().substring(hostIdx); + } + + if (hostname != null) { + return "<" + UUID.randomUUID().toString() + hostname + ">"; + } else { + return "<" + UUID.randomUUID().toString() + "@email.android.com>"; + } } public void setMessageId(String messageId) throws UnavailableStorageException { From 87802a01efc47be76bab7b1d89eb8c184d754995 Mon Sep 17 00:00:00 2001 From: Mike Perry Date: Mon, 26 May 2014 14:57:25 -0700 Subject: [PATCH 2/4] Issue 4690: Add privacy pref to omit K-9 User-Agent header. --- res/values/strings.xml | 1 + res/xml/global_preferences.xml | 5 +++++ src/com/fsck/k9/K9.java | 10 ++++++++++ src/com/fsck/k9/activity/MessageCompose.java | 5 ++++- src/com/fsck/k9/activity/setup/Prefs.java | 5 +++++ src/com/fsck/k9/preferences/GlobalSettings.java | 3 +++ 6 files changed, 28 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index e16ca6622..3ac000e63 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -331,6 +331,7 @@ Please submit bug reports, contribute new features and ask questions at Spam Delete (from notification) + Remove K-9 User-Agent from mail headers Hide subject in notifications Never When device is locked diff --git a/res/xml/global_preferences.xml b/res/xml/global_preferences.xml index 90c1c7ed6..6bbc8a2cf 100644 --- a/res/xml/global_preferences.xml +++ b/res/xml/global_preferences.xml @@ -378,6 +378,11 @@ android:entryValues="@array/global_settings_notification_hide_subject_values" android:title="@string/global_settings_notification_hide_subject_title"/> + + Date: Mon, 26 May 2014 17:14:07 -0700 Subject: [PATCH 3/4] Issue 6372: Add preference for setting timezone to UTC. This is a privacy preference to avoid leaking your current location while replying to email. --- res/values/strings.xml | 1 + res/xml/global_preferences.xml | 5 +++++ src/com/fsck/k9/K9.java | 10 ++++++++++ src/com/fsck/k9/activity/setup/Prefs.java | 5 +++++ src/com/fsck/k9/mail/internet/MimeMessage.java | 7 +++++++ src/com/fsck/k9/preferences/GlobalSettings.java | 3 +++ 6 files changed, 31 insertions(+) diff --git a/res/values/strings.xml b/res/values/strings.xml index 3ac000e63..6e509193c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -332,6 +332,7 @@ Please submit bug reports, contribute new features and ask questions at Delete (from notification) Remove K-9 User-Agent from mail headers + Use UTC as time zone in mail headers Hide subject in notifications Never When device is locked diff --git a/res/xml/global_preferences.xml b/res/xml/global_preferences.xml index 6bbc8a2cf..c985c35d9 100644 --- a/res/xml/global_preferences.xml +++ b/res/xml/global_preferences.xml @@ -383,6 +383,11 @@ android:key="privacy_hide_useragent" android:title="@string/global_settings_privacy_hide_useragent"/> + + Date: Fri, 13 Jun 2014 17:38:48 -0700 Subject: [PATCH 4/4] Fixes for cketti's code review on pull req #472 Leave the hostname == null checks so we can fall back if a hostname is not found. Also convert message-id to upper case to match Apple Mail (for privacy). --- src/com/fsck/k9/mail/Address.java | 10 ++++++++++ .../fsck/k9/mail/internet/MimeMessage.java | 20 +++++++++---------- src/com/fsck/k9/preferences/Settings.java | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/com/fsck/k9/mail/Address.java b/src/com/fsck/k9/mail/Address.java index b49f425c0..a8ef1ee0c 100644 --- a/src/com/fsck/k9/mail/Address.java +++ b/src/com/fsck/k9/mail/Address.java @@ -93,6 +93,16 @@ public class Address { return mAddress; } + public String getHostname() { + int hostIdx = mAddress.lastIndexOf("@"); + + if (hostIdx == -1) { + return null; + } + + return mAddress.substring(hostIdx+1); + } + public void setAddress(String address) { this.mAddress = address; } diff --git a/src/com/fsck/k9/mail/internet/MimeMessage.java b/src/com/fsck/k9/mail/internet/MimeMessage.java index 7c6fe6b2c..2f69cba39 100644 --- a/src/com/fsck/k9/mail/internet/MimeMessage.java +++ b/src/com/fsck/k9/mail/internet/MimeMessage.java @@ -321,21 +321,21 @@ public class MimeMessage extends Message { private String generateMessageId() { String hostname = null; - if (mFrom != null) { - int hostIdx = mFrom[0].getAddress().lastIndexOf("@"); - hostname = mFrom[0].getAddress().substring(hostIdx); + + if (mFrom != null && mFrom.length >= 1) { + hostname = mFrom[0].getHostname(); } - if (hostname == null && mReplyTo != null) { - int hostIdx = mReplyTo[0].getAddress().lastIndexOf("@"); - hostname = mReplyTo[0].getAddress().substring(hostIdx); + if (hostname == null && mReplyTo != null && mReplyTo.length >= 1) { + hostname = mReplyTo[0].getHostname(); } - if (hostname != null) { - return "<" + UUID.randomUUID().toString() + hostname + ">"; - } else { - return "<" + UUID.randomUUID().toString() + "@email.android.com>"; + if (hostname == null) { + hostname = "email.android.com"; } + + /* We use upper case here to match Apple Mail Message-ID format (for privacy) */ + return "<" + UUID.randomUUID().toString().toUpperCase(Locale.US) + "@" + hostname + ">"; } public void setMessageId(String messageId) throws UnavailableStorageException { diff --git a/src/com/fsck/k9/preferences/Settings.java b/src/com/fsck/k9/preferences/Settings.java index 11ecc921a..b4dd8ef41 100644 --- a/src/com/fsck/k9/preferences/Settings.java +++ b/src/com/fsck/k9/preferences/Settings.java @@ -35,7 +35,7 @@ public class Settings { * * @see SettingsExporter */ - public static final int VERSION = 31; + public static final int VERSION = 32; public static Map validate(int version, Map> settings,