Jacobvu84 / selenium-vietnam-training-course

Questions Tracking
7 stars 5 forks source link

Extract link in the email #48

Open Jacobvu84 opened 5 years ago

Jacobvu84 commented 5 years ago
package com.vsee;

import java.util.List
import java.util.regex.Matcher
import java.util.regex.Pattern

import javax.mail.Authenticator;
import javax.mail.BodyPart
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.util.KeywordUtil

public class MailBox {

    @Keyword
    def GetLinkInMailBox() {
        Properties properties = System.getProperties();

        properties.setProperty("mail.store.protocol", "imap");

        properties.setProperty("mail.imap.host", "imap.gmail.com");
        properties.setProperty("mail.imap.port", "993");
        properties.setProperty("mail.imap.auth", "true");
        properties.setProperty("mail.imap.ssl.enable", "true");
        properties.setProperty("mail.imap.socketFactory.class", javax.net.ssl.SSLSocketFactory.class.getName());
        properties.setProperty("mail.imap.socketFactory.fallback", "false");

        Session session = Session.getDefaultInstance(properties, new Authenticator() {

                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("jacobvu@gmail.com", "tellmethetrust");
                    }
                });

        Store store = session.getStore();
        store.connect();

        Folder folder = store.getFolder("INBOX");

        folder.open(Folder.READ_ONLY);

        KeywordUtil.logInfo("#[" + folder.getFullName() + "]");

        Message[] messages = folder.getMessages();
        for (Message message : messages) {
            String from = "";

            InternetAddress[] addresses = (InternetAddress[]) message.getFrom();

            for (InternetAddress address : addresses) {

                from += address.getAddress();
            }

            KeywordUtil.logInfo("   + from: " + from);
            KeywordUtil.logInfo("   + Subject: " + message.getSubject());

            KeywordUtil.logInfo("   + Time: " + message.getSentDate());

            String result = "";
            if(message instanceof MimeMessage) {

                Object contentObject = message.getContent();
                if(contentObject instanceof Multipart) {
                    BodyPart clearTextPart = null;
                    BodyPart htmlTextPart = null;

                    Multipart content = (Multipart)contentObject;
                    int count = content.getCount();
                    for(int i=0; i<count; i++) {
                        BodyPart part =  content.getBodyPart(i);

                        if(part.isMimeType("text/plain")) {
                            clearTextPart = part;
                            break;
                        }
                        else if(part.isMimeType("text/html")) {
                            htmlTextPart = part;
                        }
                    }

                    if(clearTextPart!=null) {
                        result = (String) clearTextPart.getContent();
                    }
                    else if (htmlTextPart!=null) {
                        String html = (String) htmlTextPart.getContent();
                        result = Jsoup.parse(html).text();
                    }
                }
                else if (contentObject instanceof String) // a simple text message
                {
                    result = (String) contentObject;
                }
                else // not a mime message
                {
                    KeywordUtil.logInfo("notme part or multipart {0}",message.toString());
                    result = null;
                }
            }

            KeywordUtil.logInfo("   + result: " + result);

            Pattern linkPattern = Pattern.compile("\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]",  Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
            //Pattern EmailPattern = Pattern.compile("([a-z0-9_.-]+)@([a-z0-9_.-]+[a-z])",  Pattern.CASE_INSENSITIVE|Pattern.DOTALL);

            Matcher matcher = linkPattern.matcher(result);

            List<String> links = new ArrayList<String>();
            while (matcher.find()) {
                links.add(matcher.group(0));
            }
            KeywordUtil.logInfo(links.get(0));
            return links.get(0);
        }
    }
}