2011-03-30 111 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); 
    } 
    }