Foros del Web » Programación para mayores de 30 ;) » Java »

Cuerpo de Envio de Correo con html

Estas en el tema de Cuerpo de Envio de Correo con html en el foro de Java en Foros del Web. Buenas a todos. Estoy implementando una Web y tengo una clase que envia correo ,hasta el momento todo perfecto pero ahora quiero mandar el cuerpo ...
  #1 (permalink)  
Antiguo 18/01/2009, 18:03
Avatar de Jocluis  
Fecha de Ingreso: julio-2008
Ubicación: Lima
Mensajes: 25
Antigüedad: 15 años, 10 meses
Puntos: 0
Cuerpo de Envio de Correo con html

Buenas a todos.
Estoy implementando una Web y tengo una clase que envia correo ,hasta el momento todo perfecto pero ahora quiero mandar el cuerpo de mensaje codificacion HTML , recordando lo que hacia con php ponia el meta type en un HEADER.

Pero como lo coloco en mi clase? para que pueda mandar codigos html.

Gracias de antemano

Aqui la clase actual que uso que por cierto envia archivos adjuntos.
Código HTML:
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.*;
import javax.activation.*;
public class EnviarCorreosAdjuntos {
    public static void main(String [] args) {
        // Comprobar que el número de argumentos es el correcto
//        if (args.length != 2) {
//            System.out.println("Ha de enviar dos parámetros\n" +
//                    "java EnviarCorreoAdjuntos fromAddress toAddress");
//            System.exit(1);
//        }
        // Obtener el from y el to recibidos como parámetros
        String from = "[email protected]";//args [0];
        String to = "[email protected]";//args [1];
        // Obtener las propiedades del sistema y establecer el servidor
        // SMTP que se va a usar
        String smtpHost  = "198.198.111.167";
        Properties props = System.getProperties();
        props.put("mail.smtp.host", smtpHost);
        // Obtener una sesión con las propiedades anteriormente definidas
        Session sesion = Session.getDefaultInstance(props,null);
        // Capturar las excepciones
        try {
            Message mensaje = new MimeMessage(sesion);
            // Rellenar los atributos y el contenido
            // Asunto
            mensaje.setSubject("Hola Mundo con adjuntos con ahtml");
            // Emisor del mensaje
            mensaje.setFrom(new InternetAddress(from));
            // Receptor del mensaje
            mensaje.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));
            Multipart mp = new MimeMultipart();
            // Texto del mensaje
            BodyPart texto = new MimeBodyPart();
            texto.setText("<META content=\"text/html; charset=utf-8\" http-equiv=Content-Type>Este es el cuerpo del mensaje<br><br>es dos saltos de linea");
            mp.addBodyPart(texto);
            // Adjuntar el primer fichero
            MimeBodyPart adjunto1 = new MimeBodyPart();
            //adjunto1.attachFile("c:/Temp/adjunto.txt");
            adjunto1.attachFile("\\\\IP\\prueba\\Texto.txt");
            mp.addBodyPart(adjunto1);
            // Adjuntar el segundo fichero
            BodyPart adjunto2 = new MimeBodyPart();
            File path = new File("c:/Temp/logo.PNG");
            DataSource source = new FileDataSource(path);
            adjunto2.setDataHandler(new DataHandler(source));
            // Nombre de fichero que aparecerá en el adjunto
            adjunto2.setFileName(path.getName());
            mp.addBodyPart(adjunto2);
            mensaje.setContent(mp);
            // Enviar el mensaje
            Transport.send(mensaje);
        } catch (MessagingException e) {
            System.err.println(e.getMessage());
        } catch (IOException ioe) {
            System.err.println(ioe.toString());
        }
    }
}

como ven en :

texto.setText("<META content=\"text/html; charset=utf-8\" http-equiv=Content-Type>Este es el cuerpo del mensaje<br><br>es dos saltos de linea");


Trate lo que hacia en php de poner el meta.
  #2 (permalink)  
Antiguo 18/01/2009, 21:27
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: Cuerpo de Envio de Correo con html

Para evitar tener que escribir a mano el charset y el content-type del cuerpo del mensaje, tenés que hacer lo siguiente:

En vez de esta línea:
Código:
texto.setText("<META content=\"text/html; charset=utf-8\" http-equiv=Content-Type>Este es el cuerpo del mensaje<br><br>es dos saltos de linea");
Utilizá las siguientes:
Código:
String texto = "Este es el cuerpo del mensaje<br><br>es dos saltos de linea";
String charset = "utf-8";
String contentType = "text/html";
texto.setText(texto,charset,contentType);
La diferencia entre los 2 códigos, está en la cantidad de parámetros que le pasas al objeto texto de la clase BodyPart.

El método setText, con un sólo parámetro (el que usaste vos), setea el texto como contenido del mensaje, pero configura el contentType en "text/plain" y el charset como "US-ASCII" sobreescribiendo el META que vos especificás.

Al usar la función setText, con 3 parámetros, le estamos diciendo las 3 cosas, el texto, la codificación y el tipo de contenido.

Espero que te sea de utilidad.
  #3 (permalink)  
Antiguo 18/01/2009, 21:36
Avatar de Jocluis  
Fecha de Ingreso: julio-2008
Ubicación: Lima
Mensajes: 25
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Cuerpo de Envio de Correo con html

Pues probe lo sugerido pero:

texto.setTexto(); solo puede acerta un parametro de envio =(


probe poniendo esto antes de lo de arriba.

String fichero="<html><head></head><body><h1>hola<br>b</h></body></html>";

BodyPart texto = new MimeBodyPart();
texto.setHeader("Content-Type","text/html");
texto.setText(fichero);


pero no funciono =(..

alguien mas me puede ayudar?
  #4 (permalink)  
Antiguo 19/01/2009, 07:47
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: Cuerpo de Envio de Correo con html

¿Qué versión de JavaMail estás usando?
  #5 (permalink)  
Antiguo 19/01/2009, 08:02
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Respuesta: Cuerpo de Envio de Correo con html

Un pequeño error mío

Lo correcto sería:

Código:
MimeBodyPart textoMime = new MimeBodyPart();
String contenido = "Este es el cuerpo del mensaje<br><br>es dos saltos de linea";
String charset = "utf-8";
String contentType = "text/html";
textoMime.setText(contenido,charset,contentType);
texto = (BodyPart) textoMime;
El problema estaba en que el método setText, se invocaba sobre la variable texto que es de tipo BodyPart y no de tipo MimeBodyPart que si acepta el método setText sobrecargado.

La solución es tan simple como invocar a setText antes de castearlo (implícitamente) a la clase BodyPart.

Saludos
  #6 (permalink)  
Antiguo 23/01/2009, 17:56
Avatar de Jocluis  
Fecha de Ingreso: julio-2008
Ubicación: Lima
Mensajes: 25
Antigüedad: 15 años, 10 meses
Puntos: 0
Sonrisa Respuesta: Cuerpo de Envio de Correo con html

@ TolaWare muchas gracias por tus sugerencias.
Estuve buscando un codigo puesto que con lo que me sugeristes no me reconocia mis librerias que usaba, y bueno despues de buscar las librerias me topé con el codigo siguiente:
Este codigo envia correo desde Java con cuerpo de mensaje en HTML(por fin ).

Código:
import sun.net.smtp.*;
import java.io.*;
import java.net.MalformedURLException;
import org.apache.commons.mail.*;
import java.net.URL;
import org.apache.commons.mail.EmailException;
import sun.net.smtp.*;
import java.io.*;
import org.apache.commons.mail.HtmlEmail;


public class EnviaMail {
    
  public EnviaMail() {
  }
  
  public static void main(String[] args) throws EmailException, MalformedURLException {
    
// Create the email message
  HtmlEmail email = new HtmlEmail();
  email.setHostName("666.666.666.66");//servidor de correos
  email.addTo("[email protected]", "Jocluis C C");//Para quien se envia
  email.setFrom("[email protected]", "Bill Gates");//quien  envia
  email.setSubject("Asunto | se ha ganado un carro ");
  
  // set the html message
  email.setHtmlMsg("<html><b>No usen Windows 7 </b> logo - <img src=\"http://media.techeblog.com/images/errormessage.jpg\"></html>");

  // set the alternative message
  email.setTextMsg("Tu Cliente de mail no Soporta HTML mensajes");

  // send the email
  email.send();
  }
  
}
Los JAR que utilice son
mail.JAR
commons-email-1.0.JAR
activation.JAR

Tenia problemas con el commons por eso envio el link de donde lo descarge y me funciono.(www.java2s.com/Code/Jar/Apache-Common/Downloadcommonsemail10jar.htm)

Cualquie duda les puedo pasar un pequeño aplicativo de ejemplo.(con librerias y todo).
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:03.