花了很多时间找到问题的解决方案后,我还没有找到解决方案。一般来说,问题如下: 有一个Web应用程序,您可以在其中发送有关项目工作的邀请,标准表单填写数据,包括将发送的电子邮件。所以覆盖自动测试此功能的任务。最初我想在selenium&#e; e发送新的instanst浏览器的邀请之后,去邮政服务,发送邀请并操纵搜索和发现信件,邀请和按下按钮。我知道它有点tugovato过程并发现他们的问题的解决方案是使用JavaMail库来接收消息。即,在这个例子中我连接到邮件服务我使用Gmail,然后从那里得到所有的字母。
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 :(得分:0)
首先,让我们clean up your code。您将默认存储协议设置为imaps
,这意味着将忽略所有mail.imap.*
属性。而且大多数都没关系,因为你明确地将连接细节传递给connect方法。
要等待新邮件到达,您可以轮询,也可以使用IMAP IDLE command。 JavaMail monitor.java sample program显示了如何做到这两点。
JavaMail不会帮助您解析收到的消息的内容。你可以使用简单的字符串处理或正则表达式,这对于这种情况可能已经足够了。或者,您可以查找将解析HTML的Java库。