sierra para mac gratis actualizar java windows osx email

java - para - ¿Cómo abro el programa de correo predeterminado con un Subject and Body de forma multiplataforma?



java para mac sierra (9)

¿Cómo abro el programa de correo predeterminado con un Subject and Body de forma multiplataforma?

Desafortunadamente, esto es para una aplicación cliente escrita en Java, no en un sitio web.

Me gustaría que esto funcione de forma multiplataforma (lo que significa Windows y Mac, lo siento Linux). Me complace ejecutar un VBScript en Windows o AppleScript en OS X. Pero no tengo idea de qué deberían contener esos scripts. Me encantaría ejecutar el programa predeterminado del usuario frente a solo buscar Outlook o lo que sea.

En OS X, he intentado ejecutar el comando:

open mailto:?subject=MySubject&body=TheBody

El escape de URL es necesario para reemplazar espacios con %20 .

Actualizado en Windows, tienes que jugar todo tipo de juegos para start a ejecutar correctamente. Aquí está el encantamiento Java adecuado:

class Win32 extends OS { public void email(String subject, String body) throws Exception { String cmd = "cmd.exe /c start /"/" /"" + formatMailto(subject, body) + "/""; Runtime.getRuntime().exec(cmd); } }


No sé si Java tiene algún método incorporado para urlencoding de la cadena, pero este enlace http://www.permadi.com/tutorial/urlEncoding/ muestra algunos de los caracteres más comunes para codificar:

Para la codificación porcentual de los nombres y hvalues ​​del URI de correo, utilizo las reglas en http://shadow2531.com/opera/testcases/mailto/modern_mailto_uri_scheme.html#encoding . En http://shadow2531.com/opera/testcases/mailto/modern_mailto_uri_scheme.html#implementations , hay un ejemplo de Java que puede ser útil.

Básicamente, uso:

private String encodex(final String s) { try { return java.net.URLEncoder.encode(s, "utf-8").replaceAll("//+", "%20").replaceAll("//%0A", "%0D%0A"); } catch (Throwable x) { return s; } }

La cadena que se transfiere debe ser una cadena con / r / n, y / r / ndarra ya normalizada a / n.

También tenga en cuenta que solo devolver la cadena original en una excepción como la anterior solo es segura si el argumento de URI de mailto que está pasando en la línea de comando está escapado y citado correctamente.

En Windows eso significa:

  1. Cita el argumento.
  2. Escape cualquier "dentro de las comillas con /.
  3. Escape cualquier / que preceda a "o el final de la cadena con /.

Además, en Windows, si está tratando con cadenas UTF-16 como en Java, es posible que desee usar ShellExecuteW para "abrir" el URI de correo. Si no lo hace y devuelve s en una excepción (donde algún hvalue no está completamente codificado en porcentajes, podría terminar enangostando algunos caracteres anchos y perdiendo información. Pero, no todos los clientes de correo aceptan argumentos unicode, así que, idealmente, desea pasar un argumento ascii utf8 adecuadamente porcentual-codificado con ShellExecute.

Al igual que ''inicio'', ShellExecute con "abrir" debería abrir el URI de correo en el cliente predeterminado.

No estoy seguro acerca de otros sistemas operativos.


Tuve que volver a implementar URLencode porque Java usaría + para espacio y Mail los tomó literalmente.

No sé si Java tiene algún método incorporado para urlencoding de la cadena, pero este enlace http://www.permadi.com/tutorial/urlEncoding/ muestra algunos de los caracteres más comunes para codificar:

; %3B ? %3F / %2F : %3A # %23 & %24 = %3D + %2B $ %26 , %2C space %20 or + % %25 < %3C > %3E ~ %7E % %25


En Java 1.6 tiene una forma estándar para abrir el programa de correo electrónico predeterminado de la plataforma: el método Desktop.mail (URI) . El URI se puede usar para configurar todos los campos del correo (remitente, destinatarios, cuerpo, asunto). Puede consultar un ejemplo completo de integración de escritorio en Java 1.6 en Uso de la API de escritorio en Java SE 6


Lo he implementado, y funciona bien en OS X. (La mención de Ryan de la longitud máxima de URL no ha sido codificada).

public void email(String subject, String body) throws Exception { String cmd = "open mailto:"; cmd += "?subject=" + urlEncode(subject); cmd += "&body=" + urlEncode(body); Runtime.getRuntime().exec(cmd); } private static String urlEncode(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); if (Character.isLetterOrDigit(ch)) { sb.append(ch); } else { sb.append(String.format("%%%02X", (int)ch)); } } return sb.toString(); }

Tuve que volver a implementar URLencode porque Java usaría + para espacio y Mail los tomó literalmente. Aún no he probado en Windows.


Mailto no es una mala ruta para ir. Pero como mencionaste, necesitarás asegurarte de que esté codificado correctamente.

El principal problema con el uso de mailto es con las líneas de corte. Use% 0A para retornos de carro,% 20 para espacios.

Además, tenga en cuenta que el mailto se considera lo mismo que una URL de tipo y, por lo tanto, tendrá las mismas limitaciones de longitud. Consulte http://support.microsoft.com/kb/208427 , tenga en cuenta la longitud máxima de URL de 2083 caracteres. Esto también se confirma para mailto en este artículo: http://support.microsoft.com/kb/279460/en-us . Además, algunos clientes de correo también pueden tener un límite (creo que las versiones anteriores de Outlook Express tenían un límite de algo mucho más pequeño, como 483 caracteres o algo. Si espera tener una cadena más larga que eso, entonces tendrá que mirar las alternativas .

Por cierto, no deberías tener que recurrir a expulsar un script para hacer eso, siempre y cuando puedas pagar un comando desde Java (no sé si puedes porque no hago Java).


Nunca use Runtime.exec(String) en Mac OS X o cualquier otro sistema operativo. Si haces eso, tendrás que encontrar la manera de citar correctamente todas las cadenas de argumentos y demás; es un dolor y muy propenso a errores.

En su lugar, use Runtime.exec(String[]) que toma una matriz de argumentos ya separados. Esto es mucho más apropiado para prácticamente todos los usos.


Puedes usar esto ...

main(string[] args){ String forUri = String.format("mailto:?subject=%s&body=%s", urlEncode(sub), urlEncode(mailBody)); Desktop.getDesktop().mail(new URI(forUri)); } private static final String urlEncode(String str) { try { return URLEncoder.encode(str, "UTF-8").replace("+", "%20"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } }

También para formatear la lectura Una forma simple de enviar correos electrónicos en Java: enlaces de correo electrónico


start funciona bien en Windows (ver a continuación). Usaría Java''s construido en UrlEscape y luego solo ejecutaría un segundo reemplazo para los caracteres ''+''.

start mailto:"?subject=My%20Subject&body=The%20Body"


1. Agregue una línea de asunto

Puede rellenar el asunto del correo electrónico agregando el asunto precedido por '' ? Subject = '' después de la dirección de correo electrónico.

Entonces el enlace ahora se convierte en:

<a href="mailto:[email protected]?subject=Mail from Our Site">Email Us</a>

2. Enviar a destinatarios múltiples

El correo se puede enviar a destinatarios adicionales, ya sea como copias en papel (cc) o copias ciegas de carbón (bcc).

Esto se hace de forma similar, colocando '' [email protected] '' después de la dirección inicial.

Entonces el enlace se ve así:

<a href="mailto:[email protected][email protected]">Email Us</a>

cc puede simplemente reemplazarse por bcc si desea enviar copias ciegas de carbón.

Esto puede ser muy útil si tiene enlaces en páginas con diferentes temas. Puede hacer que el correo electrónico en cada página vaya a la persona adecuada en una empresa, pero también con una copia de todos los correos enviados a una dirección central.

Por supuesto, puede especificar más de un destinatario adicional, simplemente separe su lista de destinatarios con una coma.

<a href="mailto:[email protected][email protected], [email protected], [email protected]">Email Us</a>

Obtenido de obtener más de ''mailto'' que ahora 404s. Recuperé el contenido de waybackmachine.

3. Código combinado

Puede combinar los diversos bits del código anterior mediante la adición de un ''&'' entre cada uno.

Así agregando

[email protected]?subject=Hello&[email protected]&[email protected]

enviaría un correo electrónico con el tema ''Hola'' para usted, usted y ella.

4. Escribe el correo electrónico

También puede rellenar el cuerpo del correo electrónico con el comienzo de un mensaje o escribir el mensaje completo si lo desea. Para agregar algo al cuerpo del correo electrónico, nuevamente es tan simple como el anterior: '' ? Body = '' después de la dirección de correo electrónico. Sin embargo, formatear ese correo electrónico puede ser un poco complicado. Para crear espacios entre palabras, deberá usar un código hexadecimal, por ejemplo, '' % 20 '' entre cada palabra, y crear nuevas líneas significará agregar '' % 0D ''. De manera similar, símbolos como $ signos deberán escribirse en código hexadecimal.

Si también desea agregar una línea de asunto y enviar copias a múltiples destinatarios, esto puede generar un código de código muy largo y difícil de escribir.

Le enviará un mensaje a tres personas, con el asunto y el mensaje rellenado, todo lo que tiene que hacer es agregar su nombre.

¡Solo mira el código!

<a href="mailto:[email protected][email protected] &[email protected]&Subject=Please%2C%20I%20insist %21&Body=Hi%0DI%20would%20like%20to%20send%20you%20 %241000000%20to%20divide%20as%20you%20see%20fit%20among %20yourselves%20and%20all%20the%20moderators.%0DPlease% 20let%20me%20know%20to%20whom%20I%20should%20send %20the%20check.">this link</a>

Nota: La fuente original URL donde encontré esto ahora está en 404ing así que agarré el contenido de waybackmachine y lo publiqué aquí para que no se pierda. Además, el OP indicó que no era para un sitio web, que es lo que estos ejemplos son, pero algunas de estas técnicas aún pueden ser útiles.