【问题标题】:How parse email and get hyperlink from mail JavaMail?如何解析电子邮件并从邮件 JavaMail 中获取超链接?
【发布时间】:2016-10-19 02:53:02
【问题描述】:

在花了很多时间寻找解决他们问题的方法后,我还没有找到解决方案。一般来说,问题如下: 有一个 Web 应用程序,您可以在其中发送参与该项目的邀请,标准表格填写数据包括将发送的电子邮件。因此,涵盖自动测试此功能的任务。最初我想在发送邀请后在 selenium'e 上完成这一切,打开一个新的即时浏览器,转到将发送邀请的邮政服务,在那里操纵搜索和发现信件,邀请,然后按按钮。我知道这是一个有点 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. 如何解析收到的信件并获得邀请的超链接?

【问题讨论】:

    标签: selenium jakarta-mail imap


    【解决方案1】:

    首先,让我们clean up your code。您将默认存储协议设置为imaps,这意味着所有mail.imap.* 属性都将被忽略。而且它们中的大多数都无关紧要,因为您将连接详细信息显式传递给 connect 方法。

    要等待新消息到达,您可以轮询,也可以使用IMAP IDLE commandJavaMail monitor.java sample program 展示了如何做到这两点。

    JavaMail 不会帮助您解析收到的邮件的内容。您可以只使用简单的字符串处理或正则表达式,这对于这种情况可能已经足够了。或者,您可以寻找可以解析 HTML 的 Java 库。

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2020-08-26
      • 2016-03-22
      • 2015-03-01
      • 2021-02-14
      • 2011-06-11
      相关资源
      最近更新 更多