mirror of https://github.com/M66B/FairEmail.git
Attempt to fix broken encodings
This commit is contained in:
parent
ce3e38c9c6
commit
0b08d00d61
|
@ -35,6 +35,7 @@ import java.io.OutputStream;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -58,6 +59,7 @@ import javax.mail.internet.InternetAddress;
|
||||||
import javax.mail.internet.MimeBodyPart;
|
import javax.mail.internet.MimeBodyPart;
|
||||||
import javax.mail.internet.MimeMessage;
|
import javax.mail.internet.MimeMessage;
|
||||||
import javax.mail.internet.MimeMultipart;
|
import javax.mail.internet.MimeMultipart;
|
||||||
|
import javax.mail.internet.MimePart;
|
||||||
import javax.mail.internet.MimeUtility;
|
import javax.mail.internet.MimeUtility;
|
||||||
import javax.mail.internet.ParseException;
|
import javax.mail.internet.ParseException;
|
||||||
|
|
||||||
|
@ -70,6 +72,13 @@ public class MessageHelper {
|
||||||
|
|
||||||
static final int ATTACHMENT_BUFFER_SIZE = 8192; // bytes
|
static final int ATTACHMENT_BUFFER_SIZE = 8192; // bytes
|
||||||
|
|
||||||
|
private static final List<String> ENCODINGS = Arrays.asList(
|
||||||
|
"base64",
|
||||||
|
"quoted-printable",
|
||||||
|
"uuencode", "x-uuencode", "x-uue",
|
||||||
|
"binary", "7bit", "8bit"
|
||||||
|
);
|
||||||
|
|
||||||
static Properties getSessionProperties(int auth_type, String realm, boolean insecure) {
|
static Properties getSessionProperties(int auth_type, String realm, boolean insecure) {
|
||||||
Properties props = new Properties();
|
Properties props = new Properties();
|
||||||
|
|
||||||
|
@ -595,6 +604,8 @@ public class MessageHelper {
|
||||||
Part part = (html == null ? plain : html);
|
Part part = (html == null ? plain : html);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
fixEncoding((MimePart) part);
|
||||||
|
|
||||||
Object content = part.getContent();
|
Object content = part.getContent();
|
||||||
if (content instanceof String)
|
if (content instanceof String)
|
||||||
result = (String) content;
|
result = (String) content;
|
||||||
|
@ -633,6 +644,33 @@ public class MessageHelper {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fixEncoding(MimePart part) throws MessagingException {
|
||||||
|
String mencoding = part.getEncoding();
|
||||||
|
if (mencoding == null || ENCODINGS.contains(mencoding))
|
||||||
|
return;
|
||||||
|
|
||||||
|
String cte = part.getHeader("Content-Transfer-Encoding")[0];
|
||||||
|
Log.i("Attempting to fix encoding=" + cte);
|
||||||
|
|
||||||
|
for (String encoding : ENCODINGS) {
|
||||||
|
boolean contains = true;
|
||||||
|
for (String pencoding : encoding.split("-"))
|
||||||
|
contains = (contains && mencoding.toLowerCase().contains(pencoding));
|
||||||
|
|
||||||
|
if (contains) {
|
||||||
|
String warning = "Changed invalid encoding " + cte + " to " + encoding;
|
||||||
|
Log.w(warning);
|
||||||
|
warnings.add(warning);
|
||||||
|
part.setHeader("Content-Transfer-Encoding", encoding);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String warning = "Unfixable encoding " + cte;
|
||||||
|
Log.w(warning);
|
||||||
|
warnings.add(warning);
|
||||||
|
}
|
||||||
|
|
||||||
List<EntityAttachment> getAttachments() throws MessagingException {
|
List<EntityAttachment> getAttachments() throws MessagingException {
|
||||||
List<EntityAttachment> result = new ArrayList<>();
|
List<EntityAttachment> result = new ArrayList<>();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue