web-dev-qa-db-ja.com

電子メールの本文内にHTMLリンクを配置するにはどうすればよいですか?

メールを送信できるアプリケーションが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ハイパーリンクではなく、リンク文字列として表示されます。どうなるかわかりません...

解決策はありますか?

14
Rafa

リンクの追加は、文字列内に_<a href="..">text</a>_を追加するのと同じくらい簡単です。 HTMLをサポートするようにメールを設定する必要があり(使用しているライブラリによって異なります)、送信する前にメールの内容をエスケープしないでください。

更新:_Java.mail_を使用しているため、次のようにテキストを設定する必要があります。

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

htmlはMIMEサブタイプです(これは_text/html_になります)。 setText(string)メソッドで使用されるデフォルト値はplainです

17
Bozho

これが他の誰かにとってうまくいかなかった場合のために私は答えるつもりです。
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);
7
Mike

URLが機能する前に「http://」を追加しました。

2
mindreader

Javaコードを使用して、メール本文にHTMLリンクを作成できます。私の場合、リンクを作成してメールでユーザーに送信する必要があるリセットパスワードを開発しています。1つの文字列を作成します文字列で、すべてのURLを入力します。httpをに追加すると、メールのリンクと同じように動作します。

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のようなパラメーターを受け取ります。あなたのキャストによると

あなたはそれが私のために働いている正しい方法で行うことができます。

 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);
     }
  }
0
Deepak Singh