Pergunta

Quero iniciar o aplicativo de cliente de e-mail padrão via função Shellexecute.

Ou seja, escrevo algo assim:

Shellexecute (0, 'Mailto: exemplo@example.com?

Como posso codificar caracteres fora dos EUA no assunto e no corpo?

Não posso usar a página de código ANSI padrão, porque os caracteres podem ser qualquer coisa: caracteres chineses, cirílico ou outra coisa.

PS NOTAS:

  1. Estou usando a função ShelLEXECUTEW.
  2. Deixar o assunto e o corpo "como está" não funcionará (testado com o Windows Live Mail Client no Win7 e o Outlook Express no WinXP).
  3. A codificação do assunto como urlencode (UTF8ENCODE (sujeito)) funcionará para o Windows Live Mail, mas não funcionará para o Outlook Express.
  4. O URLENCODE (UTF8ENCODE (BODY)) não funcionará para ambos os clientes.
Foi útil?

Solução

Mailto: exemplo@example.com? Assunto = Exemplo e corpo =%E5%85%AD

A resposta curta é não. Os caracteres devem ser codificados porcentagem conforme definido por RFC 3986 e seus antecessores. RFC 2368 define a estrutura do correio de URI.

#include "windows.h"

int main() {
  ShellExecute(0, TEXT("open"),
    TEXT("mailto:example@example.com?subject=example&body=%e5%85%ad"),
    TEXT(""), NULL, SW_SHOWNORMAL);

  return 0;
}

O corpo neste caso é o caractere CJK U+516D (六) codificado como UTF-8 (E5 85 AD). Isso funciona corretamente com o Mozilla Thunderbird (pode ser necessário instalar fontes adicionais, se não funcionar).

O resto está de acordo com a forma como o seu agente de usuário (cliente de email) interpreta o URI. O RFC 3986 exige UTF-8, mas as especificações anteriores não. Um agente de usuário pode não interpretar os dados corretamente se ele pré-datas o RFC 3986, não tiver sido atualizado ou estiver mantendo a compatibilidade com versões anteriores com implementações anteriores.

Observação: URLEncode funções geralmente significam o html application/x-www-form-urlencoded codificação. Provavelmente, isso fará com que os caracteres espaciais sejam substituídos por personagens Plus.

Nota 2: Não estou atual no estado de IRI Suporte no Windows Shell, mas provavelmente vale a pena investigar. No entanto, alguns personagens da parte da consulta ainda precisam ser codificados porcentagem.

Outras dicas

A interpretação da linha de comando está à altura do programa lançado. Dependendo da natureza do cliente de email instalado, você pode ou não obter o suporte do Unicode (em uma ou outra forma ou formulário diferente). Portanto, não há uma única receita. Alguns deles podem usar a linha de comando ANSI (porque por que não?), Outros podem respeitar os caracteres urlejados, etc.

Sua melhor aposta é detectar 3-4 mala direta ao ler o registro e personalizar sua linha de comando de acordo. Muito deselegante e incompleto por design, mas nada mais que você possa fazer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top