mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-11 03:24:52 +02:00
IDN support
This commit is contained in:
@@ -49,6 +49,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.IDN;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
@@ -187,13 +188,13 @@ public class MessageHelper {
|
||||
}
|
||||
|
||||
if (message.to != null && message.to.length > 0)
|
||||
imessage.setRecipients(Message.RecipientType.TO, message.to);
|
||||
imessage.setRecipients(Message.RecipientType.TO, convertAddress(message.to));
|
||||
|
||||
if (message.cc != null && message.cc.length > 0)
|
||||
imessage.setRecipients(Message.RecipientType.CC, message.cc);
|
||||
imessage.setRecipients(Message.RecipientType.CC, convertAddress(message.cc));
|
||||
|
||||
if (message.bcc != null && message.bcc.length > 0)
|
||||
imessage.setRecipients(Message.RecipientType.BCC, message.bcc);
|
||||
imessage.setRecipients(Message.RecipientType.BCC, convertAddress(message.bcc));
|
||||
|
||||
if (message.subject != null)
|
||||
imessage.setSubject(message.subject);
|
||||
@@ -202,7 +203,7 @@ public class MessageHelper {
|
||||
if (identity != null) {
|
||||
// Add reply to
|
||||
if (identity.replyto != null)
|
||||
imessage.setReplyTo(InternetAddress.parse(identity.replyto));
|
||||
imessage.setReplyTo(convertAddress(InternetAddress.parse(identity.replyto)));
|
||||
|
||||
// Add extra cc
|
||||
if (identity.cc != null)
|
||||
@@ -465,7 +466,7 @@ public class MessageHelper {
|
||||
result.addAll(Arrays.asList(existing));
|
||||
|
||||
Address[] all = imessage.getAllRecipients();
|
||||
Address[] addresses = InternetAddress.parse(email);
|
||||
Address[] addresses = convertAddress(InternetAddress.parse(email));
|
||||
for (Address address : addresses) {
|
||||
boolean found = false;
|
||||
if (all != null)
|
||||
@@ -481,6 +482,36 @@ public class MessageHelper {
|
||||
imessage.setRecipients(type, result.toArray(new Address[0]));
|
||||
}
|
||||
|
||||
private static Address[] convertAddress(Address[] addresses) {
|
||||
// https://en.wikipedia.org/wiki/International_email
|
||||
for (Address address : addresses) {
|
||||
String email = ((InternetAddress) address).getAddress();
|
||||
int at = email.indexOf('@');
|
||||
if (at > 0) {
|
||||
String user = email.substring(0, at);
|
||||
String domain = email.substring(at + 1);
|
||||
|
||||
try {
|
||||
user = IDN.toASCII(user);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
Log.e(ex);
|
||||
}
|
||||
|
||||
String[] parts = domain.split("\\.");
|
||||
for (int p = 0; p < parts.length; p++)
|
||||
try {
|
||||
parts[p] = IDN.toASCII(parts[p]);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
Log.e(ex);
|
||||
}
|
||||
|
||||
email = user + '@' + TextUtils.join(".", parts);
|
||||
}
|
||||
((InternetAddress) address).setAddress(email);
|
||||
}
|
||||
return addresses;
|
||||
}
|
||||
|
||||
static void build(Context context, EntityMessage message, List<EntityAttachment> attachments, EntityIdentity identity, boolean send, MimeMessage imessage) throws IOException, MessagingException {
|
||||
if (message.receipt != null && message.receipt) {
|
||||
// https://www.ietf.org/rfc/rfc3798.txt
|
||||
|
||||
Reference in New Issue
Block a user