2016-04-19 9 views
1

"JAVAMail"を使用してgmail-emailの内容を読み終えました。文字列で保存できました。今私はコンテンツ(文字列)から特定の登録URLを取得したいと思います。私はこれを行うことができますどのように、文字列をタグとHREFの多くが含まれていますが、私は下記の文メールコンテンツから「登録」URLを抽出する方法

"Please <a class="h5" href="https://newstaging.mobilous.com/en/user-register/******" target="_blank">click here</a> to complete your registration". 

内に存在する「ここをクリック」という単語にハイパーリンクにのみ提供されたURLを抽出したいですハイパーリンク上のURLを "ここをクリック"

のhref = "https://newstaging.mobilous.com/en/user-register/******" ターゲット= "_ブランク"

I次のコードを使用してこれを試しました

package email; 

import java.util.ArrayList; 
import java.util.Properties; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.NoSuchProviderException; 
import javax.mail.Session; 
import javax.mail.Store; 

public class emailAccess { 

    public static void check(String host, String storeType, String user, 
      String password) 
      { 
      try { 

      //create properties field 
      Properties properties = new Properties(); 

      properties.put("mail.imap.host",host); 
      properties.put("mail.imap.port", "993"); 
      properties.put("mail.imap.starttls.enable", "true"); 
      properties.setProperty("mail.imap.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
       properties.setProperty("mail.imap.socketFactory.fallback", "false"); 
       properties.setProperty("mail.imap.socketFactory.port",String.valueOf(993)); 
      Session emailSession = Session.getDefaultInstance(properties); 

      //create the POP3 store object and connect with the pop server 
      Store store = emailSession.getStore("imap"); 

      store.connect(host, user, password); 

      //create the folder object and open it 
      Folder emailFolder = store.getFolder("INBOX"); 
      emailFolder.open(Folder.READ_ONLY); 

      // retrieve the messages from the folder in an array and print it 
      Message[] messages = emailFolder.getMessages(); 
      System.out.println("messages.length---" + messages.length); 
       int n=messages.length; 
       for (int i = 0; i<n; i++) { 
       Message message = messages[i]; 
       ArrayList<String> links = new ArrayList<String>(); 
       if(message.getSubject().contains("Thank you for signing up for AppExe")){ 
       String desc=message.getContent().toString(); 

       // System.out.println(desc); 
       Pattern linkPattern = Pattern.compile(" <a\\b[^>]*href=\"[^>]*>(.*?)</a>", Pattern.CASE_INSENSITIVE|Pattern.DOTALL); 
       Matcher pageMatcher = linkPattern.matcher(desc); 

       while(pageMatcher.find()){ 
        links.add(pageMatcher.group()); 
       } 
       }else{ 
       System.out.println("Email:"+ i + " is not a wanted email"); 
       } 
       for(String temp:links){ 
       if(temp.contains("user-register")){ 
        System.out.println(temp); 
       } 
       } 

       /*System.out.println("---------------------------------"); 
       System.out.println("Email Number " + (i + 1)); 
       System.out.println("Subject: " + message.getSubject()); 
       System.out.println("From: " + message.getFrom()[0]); 
       System.out.println("Text: " + message.getContent().toString());*/ 

      } 
      //close the store and folder objects 
      emailFolder.close(false); 
      store.close(); 

      } catch (NoSuchProviderException e) { 
       e.printStackTrace(); 
      } catch (MessagingException e) { 
       e.printStackTrace(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      } 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     String host = "imap.gmail.com"; 
     String mailStoreType = "imap"; 
     String username = "[email protected]"; 
     String password = "*****"; 

     check(host, mailStoreType, username, password); 


    } 

} 
空白= "_私はアウトが

<クラス= "H5" のhref = "https://newstaging.mobilous.com/en/user-register/******" ターゲットとして入れてしまっ実行するには

「>私はhttps://newstaging.mobilous.com/en/user-register/ ******

すなわちのみhrefの値を抽出するにはどうすればよい

は、感謝を提案してください。

+0

あなたは「私はスプリットを使って試してみました」と言うとき...あなたが買ってあげますあなたが試したこと、その結果は何か、そしてなぜその結果はあなたが望むものではないのかを示すならば、ここでより良い応答が得られます。 – billjamesdev

+0

配列に必要なURLを取得するために使用したコードを更新し、それに応じて私の質問を編集しました。ありがとうございました。 – user2326333

+0

正規表現のurl部分をグループ化し、 'pageMatcher 'を呼び出すときに特定のグループnrを提供するように、正規表現を変更して' href 'や他の不要な部分を除外したり、グループ() ' – Andy

答えて

1

もうすぐです。あなたはgroup()を使用していますが、いくつか問題があります。

Pattern linkPattern = Pattern.compile(" <a\\b[^>]*href=\"([^\"]*)[^>]*>(.*?)</a>", Pattern.CASE_INSENSITIVE|Pattern.DOTALL); 
Matcher pageMatcher = linkPattern.matcher(desc); 
while(pageMatcher.find()){ 
    links.add(pageMatcher.group(1)); 
} 

すべて私はそれが明示的にhref属性の終了引用符を探して、あなたのパターンを変更することでした、その後、ラップでした:ここではあなたが持っているもののほんの少しの交換、動作するはずいくつかのコードですあなたがカッコで探している文字列であったパターンの部分。

また、pageMather.group()メソッドに引数を追加しました。

はあなたに真実を伝える、あなたはおそらく(.group(1)変化に伴って)の代わりに、このパターンを使用することもできます。

Pattern linkPattern = Pattern.compile("href=\"([^\"]*)", Pattern.CASE_INSENSITIVE|Pattern.DOTALL); 
関連する問題