Outlook не обрабатывает многобайтовые символы при использовании mailto: - PullRequest
1 голос
/ 10 июня 2009

У меня проблема, аналогичная описанной в этом вопросе : я использую протокол "mailto" для открытия почтового клиента по умолчанию из Java (сейчас я привязан к Java 5, так что, к сожалению, я невозможно использовать Desktop API ).

Некоторые электронные письма содержат текст на японском языке. Строки уже кодируются в UTF-8 следующим образом:

private void email(String to, String subject, String body)
{
    String encodedSubject = URLEncoder.encode(subject, "UTF-8");
    String encodedBody = URLEncoder.encode(body, "UTF-8");

    String mailto = "mailto:" + to + "?subject=" + encodedSubject + 
        "&body=" + encodedBody;
    String cmd = "cmd.exe /c start \"\" \"" + mailto + "\"";
    Runtime.getRuntime().exec(cmd);
}

Японские символы правильно кодируются в свои URL-эквиваленты, поэтому, например, «平» становится «% E5% B9% B3»; тем не менее, когда Outlook открывает новое почтовое окно, трехбайтовый символ интерпретируется как три различных символа, поэтому «% E5% B9% B3» интерпретируется как «å¹³».

Я вполне убежден, что проблема заключается в outlook, поскольку следующий фрагмент HTML-кода дает тот же эффект (похоже, SO не позволяет mailto внутри тегов, поэтому я не могу предоставить ссылку напрямую, извините):

<html>
    <body>
    <a href="mailto:foo@bar.com?subject=%E5%b9%B3">click me to test!</a>
    </body>
</html>

Короче говоря, как я могу убедить Outlook правильно интерпретировать многобайтовые символы, когда они приходят по ссылке mailto?

РЕДАКТИРОВАТЬ: Чтобы ответить на вопрос Йоханнеса: у нас есть приложение Java, которое отправляет электронную почту при выполнении определенных действий. Стандартный текст для каждого письма извлекается из комплектов ресурсов, и в большинстве случаев мы без проблем используем JavaMail API; но в этом случае требуется, чтобы пользователь мог настроить электронную почту перед отправкой.

Если кто-то может предложить не cmd.exe способ создания того же эффекта (новое почтовое окно с предварительно заполненной темой и телом) и с учетом того, что мы привязаны к Java 5, поэтому Desktop API, к сожалению, не вариант - я был бы очень рад!

Ответы [ 5 ]

1 голос
/ 01 апреля 2011

В Windows Live Mail у меня все в порядке, но отображаемое имя получателя - нет. Когда все в кодировке UTF-8, Android работает нормально, но Windows Live Mail отображает некоторые символы в «Кому:», в то время как «Тема:» верна. Когда я использую UTF-16 для «To:», Windows Live Mail теперь работает, но Android по-прежнему получает его как UTF-8 ...

1 голос
/ 18 декабря 2010

Вы можете попробовать это:

Существует опция под названием: Включить поддержку UTF-8 для протокола mailto: в Outlook @

Инструменты> Параметры> Формат почты> Международные параметры> [x] Включить поддержку UTF-8 для mailto: protocol

Будем надеяться, что это работает для вас

0 голосов
/ 28 августа 2011

В mailto: link должна использоваться кодировка RFC2047, а не UTF. http://en.wikipedia.org/wiki/MIME

электронная почта:??? Me@example.com Заголовок == UTF8 B aGVsbG8 =

http://webnet77.com/cgi-bin/helpers/base-64.pl

0 голосов
/ 27 июня 2009

Полагаю, ваш почтовый Java работает нормально , но для уверенности попробуйте переключиться на JavaMail .

Посмотрите этот пост. Outlook 2003 по умолчанию неправильно распознает кодировку символов писем HTML (во многих случаях), даже если они содержат соответствующий тег:

 <meta http-equiv="content-type" content="text/html; charset=UTF-8">

Вы можете переключиться на Outlook 2007 и / или открыть почту в редакторе и настроить свойства сообщения:

  • открыть сообщение
  • Редактировать -> Редактировать сообщение
  • Формат -> Кодировка -> Выбрать новую кодировку
  • Файл -> Сохранить

Редактировать: Исправления после изменения вопроса.

Edit2: Извините, не прочитал полный вопрос.

Я вижу, что у вас есть ограничение Java 5, но если реализация также связана с Windows, рассмотрите возможность использования решения на основе JNI / JNA (к сожалению, я не могу дать вам ссылки на это). Я также хотел бы взглянуть на реализацию OpenJDK Desktop API и извлечь из нее путь.

Другой вариант - передать сообщение без кодирования URLE?

Также, если для пользователя требуется настроить сообщение перед отправкой, вы можете предоставить простой редактор для этого в своем приложении и при этом отправить сообщение через JavaMail.

Вы также можете предложить совместный способ подготовки сообщения для пользователя, помещения его в буфер обмена и открытия почтового клиента для пользователя. Тогда пользователю нужно всего лишь нажать CTRL + V, чтобы вставить подготовленный текст.

0 голосов
/ 10 июня 2009

Вы не указываете какую-либо кодировку, поэтому Outlook (или тот, кто дает адрес Outlook) может только догадываться. В случае вашего фрагмента HTMl, попробуйте изменить это поведение, указав кодировку (UTF-8) явно в <head>.

Что касается cmd, он не может справиться с UTF-8. Тем не менее, он обрабатывает Unicode как UTF-16, хотя и с проблемами.

Когда я пытаюсь это сделать здесь (хотя Windows Outlook Mail вместо Outlook), все в теме преобразуется в устаревшую кодовую страницу, поэтому при наличии CJK должна возникнуть проблема.

Однако мне интересно, почему вы пытаетесь неправильно использовать cmd, чтобы позволить пользователю написать письмо в любом случае. Конечно, есть лучшие альтернативы (хотя я в настоящее время не знаю ни одной, потому что я никогда не нуждался в этом).

...