2011-03-30 115 views
10

我有一个应用程序可这就是发送邮件,用Java实现。我希望把里面去邮件的HTML链接,但链接显示为正常的字母,而不是HTML链接... 我该怎么做才能在HTML链接内为一个字符串?我需要特殊字符?非常感谢你如何在电子邮件正文中放置HTML链接?

更新: 嗨evereybody!感谢oyu答案!这里是我的代码:

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; 
    } 
} 

这里体内字符串:

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

但收到的邮件中的链接显示为链路串,而不是HTML超链接!我不明白发生了什么......

任何解决方案?

+0

这可能是由于电子邮件的生成和发送方式,而不是与'String'有关。如果您包含代码示例,我们可以 确认。你知道你是否发送电子邮件作为MIME或纯文本? – gutch 2011-03-30 21:57:00

回答

16

添加链接是添加<a href="..">text</a>里面的字符串一样简单。您应该将您的电子邮件设置为支持html(取决于您使用的库),并且在发送之前不应该跳过您的电子邮件内容。

更新:由于您使用java.mail,你应该设置文字是这样的:

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

html是MIME子类型(这将导致text/html)。 setText(string)方法使用的默认值为plain

+0

HI evereybody!谢谢你的答案!在这里你是我的代码: – Rafa 2011-03-31 07:14:50

+0

@Rafa - 看到我更新的答案。 – Bozho 2011-03-31 07:24:24

+0

OMG它的工作原理!谢谢你这么匹配Bozho !!!!真的非常感谢!你太棒了! – Rafa 2011-03-31 07:51:22

7

我只是想回答这种情况,这对其他人无效。
我试过Bozho的方法,由于某种原因,当我的消息,作为一个整体做了setText电子邮件不会派。

我试图

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

但这之际,在Outlook中,而不是在普通的文本中的附件。为了解决这个问题对我来说,和Outlook,而不是做的mbp.setContent和message.setText,我只是做了邮件正文部分的单一的setText。即:

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

与我为寻找这样的消息代码:

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

追加的 “http://” 前的URL为我工作。

1

我们可以通过使用java代码在电子邮件正文中创建html链接。在我的情况下,我正在开发重置密码,我应该创建链接并通过邮件发送给用户。您将创建一个字符串。你输入所有的URL。如果你添加了http,那么它的行为就像邮件中的链接一样。

例如:String mailBody =“http:// localhost:8080/Mail/verifytoken?token =”+ token;

通过添加查询字符串,您可以通过url发送一些值。它具有一些加密值。

将mailBody放入邮件正文参数中。 ex“:”Hi“+ userdata.getFirstname()+ ”\ n \ n您已经从X应用程序请求新密码。请使用以下链接登录“+ ” \ n \ n点击上链接:“+ mailBody);

以上是是,你必须传递给您的邮件service.Email参数字符串服务需要参数,如从,到,主题,body.Here我已经给身体如何应该是。你通过从,到,主题值根据你的演员

0

你可以做正确的方式它是为我工作。

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); 
    } 
    }