🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #27996

Re: Incluir ficheros mediante un e-mail

#27996
From: Carlos Prados
Date: Sat, 20 Jun 1998 00:00
90 lines
3358 bytes
Dani wrote:

> Estoy desarrollando una aplicaci�n que debe mandar dos ficheros con
> extensi�n .db (de paradox) a un servidor de correo, para posteriormente
> recogerlos la persona a la que se indica.
>
> S� como mandar el correo, pero no como poder adjuntar los dos ficheros
> �Alguien puede ayudarme?
>
> Gracias y un saludo.

Debes generar un mensaje de correo  con varios cuerpos, cada uno de los
cuales va separado por una cabecera  que indica el correspondiente tipo
MIME del fichero que va a continuacion. Mira el codigo fuente de un
mensaje de correo generado con un cliente de correo, por ejemplo Netscape,
e intenta generar un mensaje asi desde tu programa. Yo lo he hecho asi

public void sendMail {

  /*
 Por aqui abro un socket con el puerto 25 y obtengo el PrintWriter pw o
bien en UNIX ejecuto "rmail"
  y obtengo la STDIN del proceso en pw ...

 A continuacion escribo el mail sobre el stream pw
 */

    // Version MIME
    pw.println("MIME-Version: 1.0");

    // Campo subject
    pw.println("Subject:" + msgSubject);

    // Cuerpo del mensaje
    pw.println("Content-Type: multipart/mixed; boundary="
             + '\"' + boundary + '\"');
    pw.println();
    pw.println("This is a multi-part message in MIME format.");
    pw.println();
    pw.println("--" + boundary);
    pw.println("Content-Type: text/plain; charset=us-ascii");
    pw.println("Content-Transfer-Encoding: 7bit");
    pw.println();
    pw.println(msgBody);
    pw.println();

    // Ficheros adjuntados
    for(int i=0; i<attachedFiles.size(); i++) {

      // Informacion de attachment
      pw.println("--" + boundary);
      pw.println("Content-Type: application/octet-stream");
      pw.println("Content-Transfer-Encoding: base64");
      pw.println("Content-Disposition: attachment; filename=" +
                 '\"' + (String)attachedFiles.elementAt(i) + '\"');
      pw.println();
      pw.flush();

      // fichero binario codificado
      byte[] buffer = (byte[])attachedCode.elementAt(i);
      bos.write(buffer,0,buffer.length);
      bos.flush();
      pw.println();
    }

    // Termina el mensaje
    pw.println("--" + boundary + "--");
    pw.flush();

    /*
    Cerrar sockets y streams, o bien terminar el proceso "rmail"...
   */
}

Aclaraciones:

- boundary es un String arbitrario.
- msg Subject y msgBody son Strings con el subject y cuerpo principal del
mensaje respectivamente.
- attachedFiles es un vector cuyos elementos son byte arrays que contienen
los ficheros a atachear.
     No conozco el formato db. Si no es ascii lo mismo tienes que
codificarlos previamente con UUEncode.

Si esto te parece complicado, quizas te sea util el API JavaMail de Sun.
Mira en http://java.sun.com.

Salu2.
Carlos
Technical Details
Message-ID: <358B06C2.CB67C0ED@atos-ods.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <6me50t$njc$1@talia.mad.ibernet.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,7f44be4376e1cfd8
X-Google-Attributes: gid1116f3,public
From: Carlos Prados <cprados@atos-ods.es>
Subject: Re: Incluir ficheros mediante un e-mail
Date: 1998/06/20
Message-ID: <358B06C2.CB67C0ED@atos-ods.es>
X-Deja-AN: 364354104
Content-Transfer-Encoding: 8bit
References: <6me50t$njc$1@talia.mad.ibernet.es>
To: Dani <fresa@QUITARmaptel.es>
Content-Type: text/plain; charset=iso-8859-1
Organization: Atos ODS
Mime-Version: 1.0
Newsgroups: es.comp.lenguajes.java