如何在电子邮件正文中插入HTML链接?

16
我有一个用Java实现的发送邮件的应用程序。我想在邮件中放置一个HTML链接,但该链接出现为普通字母,而不是HTML链接...我该如何将HTML链接放入字符串中?我需要特殊字符吗?非常感谢。
更新: 大家好!谢谢你们的回答!这是我的代码:
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超链接!我不明白发生了什么...

有什么解决方法吗?


这可能与电子邮件的生成和发送方式有关,而与“String”无关。如果您提供代码示例,我们可以确认一下。您知道您是将电子邮件作为MIME还是纯文本发送吗? - gutch
5个回答

20

添加链接就像在字符串中加入<a href="..">text</a>一样简单。您应该将电子邮件设置为支持HTML(这取决于您使用的库),并且在发送之前不应转义电子邮件内容。

更新:由于您正在使用java.mail,因此您应该以这种方式设置文本:

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

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


1
@Rafa - 很好 :) 顺便说一下,在stackoverflow上,如果一个答案对你有用,你可以将其标记为已接受的答案(在投票计数器下方打勾)。 - Bozho

8
我来回答一下,以防万一此方法对其他人无效。
我尝试了Bozho的方法,但由于在整个消息上执行setText时电子邮件没有发送,原因不明。
MimeBodyPart mbp = new MimeBodyPart(); 
mbp.setContent(body, "text/html"); 

但是这封邮件附件在Outlook中发送时,与通常的文本格式不同。为了解决这个问题,我只需要对消息正文部分执行单一的setText方法即可,而不是使用mbp.setContent和message.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);

7
在URL前面添加"http://"对我很有用。

在我的情况下,使用https://。纯文本正文。已验证可在Gmail和iOS Mail中工作。 - WeakPointer

1
我们可以使用Java代码在电子邮件正文中创建HTML链接。在我的情况下,我正在开发重置密码功能,需要创建链接并通过邮件发送给用户。您将创建一个字符串,在该字符串中输入所有URL。如果您将http添加到其中,则它会在邮件中表现为链接。
例如:String mailBody ="http://localhost:8080/Mail/verifytoken?token="+ token ;
您可以通过添加查询字符串向URL发送一些值。这里的token具有一些加密值。
将mailBody放入您的邮件正文参数中。 例如:"Hi "+userdata.getFirstname()+ "\n\n 您已从X应用程序请求新密码。请使用以下链接登录。"+ "\n\n 点击链接:"+mailBody);
以上是您需要传递给邮件服务的参数字符串。电子邮件服务接受类似于from、to、subject、body的参数。在此,我已经给出了正文应该如何。您根据您的情况传递from、to、subject值。

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 = "XXXXXXX@gmail.com";      
           String from = "XXXXXXXX@gmail.com";
           final String username = "XXXXX@gmail.com";
           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);
     }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接