2016-10-18 3 views
0

問題を解決するために多くの時間を費やした後、解決策が見つかりませんでした。一般的に問題は次のとおりです。 プロジェクトで作業するための招待状を送ることができるWebアプリケーションがあります。標準的なフォームには、送信される電子メールを含むデータが入っています。したがって、この機能を自動テストするためのタスクです。当初、私は新しいインスタント・ブラウザを開くための招待状を送った後、セレンの上ですべてそれをすると思っていました。郵便サービスに行き、招待状を送り、手紙の検索と発見を操作し、招待し、ボタン。私はそれが少しtugovatoのプロセスであることを理解し、メッセージを受信するためにJavaMailライブラリを使用することが彼らの問題の解決策であることがわかりました。つまり、この例ではメールサービスに接続するためにGmailを使用し、そこからすべての文字を取得します。どのように電子メールを解析し、メールJavaMailからハイパーリンクを取得するのですか?

import java.util.Properties; 

public class PropertiesEmail { 

String host = "imap.gmail.com"; 
String user = "userEmail"; 
String password = "password"; 
int port = 993; 

public Properties setServerProperties(){ 
    Properties properties = new Properties(); 
    properties.put("mail.imap.host", host); 
    properties.put("mail.imap.port", port); 
    properties.put("mail.imap.starttls.enable", "true"); 
    properties.put("mail.store.protocol", "imaps"); 
    return properties; 
} 

} 

import javax.mail.*; 
import javax.mail.search.FlagTerm; 
import java.util.Properties; 

public class CheckUnreadEmail { 

public static void checkUnreadEmail(){ 

    try{ 

     //Create object email properties 
     PropertiesEmail propertiesEmail = new PropertiesEmail(); 

     //Set email server properties 
     Properties props = propertiesEmail.setServerProperties(); 

     Session session = Session.getDefaultInstance(props); 

     Store store = session.getStore(); 

     store.connect(propertiesEmail.host, propertiesEmail.user, propertiesEmail.password); 

     //Create the folder object and open it 
     Folder folder = store.getFolder("INBOX"); 
     folder.open(Folder.READ_WRITE); 

     //Total unread messages 
     System.out.println("Total messages: " + folder.getMessageCount()); 
     System.out.println("Unread messages: " + folder.getUnreadMessageCount()); 


     //Create variable for search unread message 
     FlagTerm flag = new FlagTerm(new Flags(Flags.Flag.SEEN), false); 

     //Retrieve all messages 
     //Message [] messages = folder.getMessages(); 

     //Retrieve unread messages from the folder INBOX 
     Message [] unreadMessage = folder.search(flag); 

     for (int i = 0, n = unreadMessage.length; i < n; i++){ 
      Message message = unreadMessage[i]; 
      System.out.println("--------------"); 
      System.out.println("Subject: " + message.getSubject()); 
     } 

     //folder.setFlags(unreadMessage, new Flags(Flags.Flag.SEEN), true); 

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

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

} 

} 

いくつかの質問があります。 1.メールで新しい文字を待つためにどのように? (以来、電子メールの招待状は一度に来ません) 2.手紙を受け取ってパースし、招待状へのハイパーリンクを取得する方法は?

答えて

0

まず、clean up your codeとしましょう。デフォルトのStoreプロトコルをimapsに設定しています。つまり、すべてのmail.imap.*プロパティが無視されています。そして、接続の詳細をconnectメソッドに明示的に渡しているので、それらのほとんどは重要ではありません。

新しいメッセージが到着するまで待つには、ポーリングするか、IMAP IDLE commandを使用します。 JavaMail monitor.java sample programには両方を行う方法が示されています。

JavaMailは、受信したメッセージの内容を解析する手助けをしません。単純な文字列処理や正規表現を使うことができます。これはおそらくこの場合には十分です。または、HTMLを解析するJavaライブラリを探すことができます。

関連する問題