2016-10-18 4 views
0

Потратив много времени на поиски решения проблемы, и я не нашел решения. В общем случае проблема заключается в следующем: Существует веб-приложение, в котором вы можете отправить приглашение для работы над проектом, стандартные данные заполнения формы, включая электронную почту, которая будет отправлена. И поэтому задача покрыть автоматическую проверку этой функции. Первоначально я решил сделать все это на selenium'e после отправки приглашения открыть новый браузер instanst, перейти в почтовую службу, которая будет отправлена ​​приглашением, и там манипулируют поиском и открытием письма, приглашением и нажатием кнопка. Я понимаю, что это немного туговато-процесс и нашел решение их проблемы - использовать библиотеку 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 не поможет вам разобрать содержание полученного сообщения. Вы можете просто использовать строчную обработку строк или регулярные выражения, что, вероятно, достаточно хорошо для этого случая. Или вы можете искать библиотеку Java, которая будет анализировать HTML.

Смежные вопросы