2011-03-30 10 views
10

Tengo una aplicación que puede enviar correos electrónicos, implementada en Java. Quiero poner un enlace HTML dentro de correo, pero el enlace aparece como letras normales, no como un enlace HTML ... ¿Cómo puedo hacerlo dentro del enlace HTML en una cadena? Necesito personajes especiales? muchas gracias¿Cómo puedo poner un enlace HTML dentro de un cuerpo de correo electrónico?

Actualización: HI evereybody! gracias por las respuestas oyu! Aquí está mi código:

public static boolean sendMail(Properties props, String to, String from, 
      String password, String subject, String body) 
{ 
    try 
    { 
     MimeBodyPart mbp = new MimeBodyPart(); 
     mbp.setContent(body, "text/html"); 
     MimeMultipart multipart = new MimeMultipart(); 
     multipart.addBodyPart(mbp); 



     // Preparamos la sesion 
     Session session = Session.getDefaultInstance(props); 

     // Construimos el mensaje 
     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.setContent(multipart); 
     message.addRecipient(
       Message.RecipientType.TO, 
       new InternetAddress(to)); 
     message.setSubject(subject); 
     message.setText(body); 

     // Lo enviamos. 
     Transport t = session.getTransport("smtp"); 
     t.connect(from, password); 
     t.sendMessage(message, message.getAllRecipients()); 

     // Cierre. 
     t.close(); 
     return true; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
     return false; 
    } 
} 

Y aquí el cuerpo de cuerdas:

 String link = "<a href=\"WWW.google.es\">ACTIVAR CUENTA</a>"; 

Pero en el mensaje recibido el enlace aparece como la cadena de enlace, no como hipervínculo HTML! No entiendo lo que pasa ...

Cualquier solución?

+0

es probablemente debido a la forma en que se genera el correo y se envía, y no tener nada que ver con el 'string'. Si se incluye un ejemplo de código que pudimos confirma eso. ¿Sabes si estás enviando correos electrónicos como MIME o como texto sin formato? – gutch

Respuesta

16

agregar el vínculo es tan simple como añadir la <a href="..">text</a> dentro de la cadena. Debe configurar su correo electrónico para que sea compatible con html (depende de la biblioteca que esté utilizando), y no debe escapar del contenido de su correo electrónico antes de enviarlo.

Actualización: dado que está utilizando java.mail, se debe configurar el texto de esta manera:

message.setText(body, "UTF-8", "html"); 

html es el subtipo MIME (esto se traducirá en text/html). El valor predeterminado que utiliza el método setText(string) es plain

+0

HI evereybody! gracias por las respuestas oyu! Aquí está mi código: – Rafa

+0

@Rafa - ver mi respuesta actualizada. – Bozho

+0

¡Dios mío funciona! ¡gracias, así que combinámonos con Bozho! ¡Realmente gracias! ¡Son geniales! – Rafa

7

Voy a responder en caso de que esto no funcione para otra persona.
He intentado el método de Bozho y por alguna razón el correo electrónico no enviaría cuando hice el setText en el mensaje como un todo.

me trataron

MimeBodyPart mbp = new MimeBodyPart(); 
mbp.setContent(body, "text/html"); 

pero esto se produjo como un archivo adjunto en Outlook en lugar de en el texto habitual. Para solucionar esto, y en Outlook, en lugar de hacer mbp.setContent y message.setText, simplemente hice un setText en la parte del cuerpo del mensaje. es decir:

MimeBodyPart mbp = new MimeBodyPart(); 
mbp.setText(messageBody,"UTF-8", "html"); 

Con mi código para el mensaje con este aspecto:

MimeMessage message = new MimeMessage(session); 
message.setFrom(new InternetAddress(from)); 
for(String str : to){ 
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(str)); 
}   
message.setSubject(subject); 
// Create the message part 
MimeBodyPart messageBodyPart = new MimeBodyPart(); 

// Fill the message 
messageBodyPart.setText(messageBody,"UTF-8","html"); 

Multipart multipart = new MimeMultipart(); 
multipart.addBodyPart(messageBodyPart); 

// Put parts in message 
message.setContent(multipart); 

// Send the message 
Transport.send(message); 
2

Al añadir "http: //" antes de la URL trabajó para mí.

1

Podemos crear un enlace html en el cuerpo del correo electrónico mediante el uso de código java. En mi caso, estoy desarrollando una contraseña para restablecer donde debería crear un enlace y enviarlo al usuario por correo. Crearás una cadena. Con una cadena escribe todo el url. Si agrega el http al que .it se comporta como un enlace en el correo.

Ex: String mailBody = "http: // localhost: 8080/Mail/verifytoken? Token =" + token;

se puede enviar algo de valor con url mediante la adición de un testigo de consulta string.Her tiene algún valor encriptado.

poner en su cuerpo del correo electrónico parámetros de cuerpo. ex ": " Hola "+ userdata.getFirstname() + " \ n \ n Ha solicitado una nueva contraseña de la aplicación X. Utilice el acoplamiento abajo para iniciar la sesión en "+ " \ n \ n Haga clic en el enlace: ". + Cuerpo del correo);

Lo anterior es la cadena que es el parámetro que tiene que pasar a su service.Email electrónico el servicio toma parámetros como from, to, subject, body.He dado el cuerpo como debe ser.puedes pasar de, a, los valores del sujeto de acuerdo con tu elenco

0

puedes hacerlo de la manera correcta para mí.

public class SendEmail 
{ 
    public void getEmail(String to,String from, String userName,String password,Properties props,String subject,String messageBody) 
    { 
     MimeBodyPart mimeBodyPart=new MimeBodyPart(); 
     mimeBodyPart.setContent(messageBody,"text/html"); 
     MimeMultipart multipart=new MimeMultipart(); 
     multipart.addBodyPart(mimeBodyPart); 
     Session session=Session.getInstance(props,new Authenticator() 
     { 
      protected PasswordAuthentication getPasswordAuthentication() 
      { 
       return new PasswordAuthentication(userName,password); 
      } 
     }); 
     try{ 
       MimeMessage message=new MimeMessage(session); 
       message.setFrom(new InternetAddress(from)); 
       message.setContent(multipart); 
       message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); 
      message.setSubject("Have You got Mail!"); 
      message.setText(messageBody,"UTF-8","html"); 
      Transport.send(message); 
      } 
      catch(MessagingException ex){System.out.println(ex)} 
     public static void main(String arg[]){ 
     SendEmail sendEmail=new SendEmail(); 
      String to = "[email protected]";  
      String from = "[email protected]"; 
      final String username = "[email protected]"; 
      final String password = "XXXX"; 
      String subject="Html Template"; 

      String body = "<i> Congratulations!</i><br>"; 
      body += "<b>Your Email is working!</b><br>"; 
      body += "<font color=red>Thank </font>"; 
      String host = "smtp.gmail.com"; 
      Properties props = new Properties(); 
      props.put("mail.smtp.auth", "true"); 
      props.put("mail.smtp.starttls.enable", "true"); 
      props.put("mail.smtp.host", host); 
      props.put("mail.smtp.port", "587"); 
      sendEmail.getEmail(to,from,username,password,props,subject,body); 
    } 
    } 
Cuestiones relacionadas