如何在电子邮件正文中放置 HTML 链接?

Posted

技术标签:

【中文标题】如何在电子邮件正文中放置 HTML 链接?【英文标题】:How Can I put a HTML link Inside an email body? 【发布时间】:2011-07-26 11:00:40 【问题描述】:

我有一个可以发送邮件的应用程序,用 Java 实现。我想在 de mail 中放置一个 html 链接,但该链接显示为普通字母,而不是 HTML 链接... 如何将 HTML 链接内的内容转换为字符串?我需要特殊字符吗?非常感谢

更新: 大家好!感谢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 超链接!我不明白会发生什么......

有什么办法吗?

【问题讨论】:

这可能与电子邮件的生成和发送方式有关,与String 无关。如果您包含代码示例,我们可以确认这一点。您知道您是以 MIME 格式还是纯文本格式发送电子邮件? 【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

我只是要回答,以防这对其他人不起作用。 我尝试了 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);

【讨论】:

【参考方案3】:

在对我有用的 URL 之前附加“http://”。

【讨论】:

https:// 就我而言。素体。看到它适用于 gmail 和 ios 邮件。【参考方案4】:

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

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

你可以通过添加查询字符串来发送一些带有url的值。她的令牌有一些加密的值。

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

上面是你必须传递给你的邮件服务的参数字符串。电子邮件服务接受像 from,to,subject,body 这样的参数。这里我给出了 body 它应该是怎样的。你传递 from ,to ,主题值根据你的演员表

【讨论】:

【参考方案5】:

你可以做对我有用的正确方法。

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

【讨论】:

以上是关于如何在电子邮件正文中放置 HTML 链接?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 HTML 文件的正文中放置 <style>...</style> 标记以通过电子邮件发送吗?

是否可以在 MAILTO 链接的正文中添加 HTML 链接 [重复]

如何将列中的超链接插入Outlook电子邮件正文

HTML mailto:链接内置的电子邮件,主题和正文

如何插入到Outlook电子邮件正文中的HTML文件

如何在 iOS 中将图像嵌入到电子邮件的 HTML 正文中