mandar enviar correo como archivos archivo adjunto adjuntar java email email-client jdic

java - enviar - ¿Iniciar cliente de correo con archivo adjunto?



enviar correo java archivo adjunto (3)

(hasta donde yo sé) Actualmente no es posible agregar un archivo adjunto predefinido, pero puede hacer otras cosas que usted mencionó (para iniciar el cliente de correo predeterminado con el receptor, el asunto y el cuerpo definidos) usando java.awt.Desktop.mail. . Creo que ya has marcado here . Sin embargo, sería muy útil.

Actualmente estoy buscando una forma (en Java) para iniciar el cliente de correo predeterminado con el receptor, el sujeto y el cuerpo definidos y con un archivo adjunto predefinido.

Debido a las limitaciones del RFC, el método java.awt.Desktop.mail no funciona con archivos adjuntos. El proyecto JDIC está muerto y el proyecto JMAPI es bastante oscuro en el proceso de construcción. (Necesita 1.4 Mozilla-Sources) Y yo mismo tengo que compilarlo para sistemas de 64 bits.

¿Hay una alternativa? Ya leí los artículos aquí, pero usar rundl32.dll y esas "soluciones" no es algo que quiera poner en el código de producción.


No parece haber ningún método de OS agnóstico para hacer esto en Java, ya que no todos los sistemas operativos proporcionan una forma estándar para iniciar la aplicación predeterminada de correo electrónico con más campos que los básicos para un nuevo correo electrónico.

En Windows, es posible utilizar una interfaz JNI para MAPI, que proporcionará más control sobre la apertura de un correo electrónico en una aplicación de correo. Como mencionó, una de esas bibliotecas es JMAPI, sin embargo, parece que hay muchas bibliotecas con un nombre similar con propósitos similares. Descubrí uno que se mantuvo recientemente y parece bastante directo. Incluye un dll binario preconstruido y una biblioteca Java JNI que lo acompaña.

https://github.com/briandealwis/jmapi

Con este código, parece que solo necesitaría construir un objeto de mensaje y llamar a un método para iniciarlo en una aplicación de correo: import jmapi. *; ...

if (JMAPI.isMapiSupported()) { Message msg = new Message(); msg.setSubject("test!"); msg.setBody("Hello world"); List<String> toAddresses = new LinkedList<String>(); toAddresses.add("[email protected]"); msg.setToAddrs(toAddresses); List<String> attachPaths = new LinkedList<String>(); //Must be absolute paths to file attachPaths.add("C:/Users/Documents/file.jpg"); msg.setAttachments(attachPaths); JMAPI.open(msg); }

Otra posibilidad que podría funcionar para Windows y Mac (y potencialmente otros sistemas operativos) es generar un archivo ".eml" o ".msg" con el contenido y los archivos adjuntos que desea incluir ya codificados como parte del correo electrónico. Este archivo podría ser lanzado con el controlador predeterminado para el formato de archivo de correo electrónico respectivo. Sin embargo, no se garantiza que abra el controlador de correo electrónico predeterminado, ni el formato de archivo será compatible con todos los clientes de correo electrónico.


Probablemente ya sea demasiado tarde, pero por si acaso alguien todavía encuentra este problema:

Desktop.getDesktop().mail(new URI("mailto:[email protected]?subject=attachment_example&body=see_attached_file&attachment=/path/to/attachment"));

debería hacer el truco de una manera independiente de la plataforma.