首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Selenium WebDriver读取电子邮件中的动态口令?

如何使用Selenium WebDriver读取电子邮件中的动态口令?
EN

Stack Overflow用户
提问于 2018-12-24 21:12:41
回答 1查看 5.3K关注 0票数 3

我正在自动化的网页,注册,动态口令发送到电子邮件进行验证。我想从电子邮件和打印文本字段获取动态口令。

敬请指教。

EN

回答 1

Stack Overflow用户

发布于 2019-05-13 12:03:13

下面的代码可以用于从Outlook邮箱获取OTP,类似的smtp可以用于所有其他邮箱。

代码语言:javascript
复制
public static String OutlookMailReader(String mailFolderName,String emailSubjectContent, String emailContent, int lengthOfOTP) {

            
//mailFolderName(Eg- "INBOX"), emailSubjectContent(Eg- Mail for OTP),
emailContent(Eg- OTP is 111111), OTP length(Eg- 6)
            String hostName = "smtp-mail.outlook.com";//change it according to your mail

            String username = "****@***.com";//username 

            String password = "*******";

            int messageCount;

            int unreadMsgCount;

            String emailSubject;

            Message emailMessage;

            String searchText=null ;

            Properties sysProps = System.getProperties();

            sysProps.setProperty("mail.store.protocol", "imaps");

            try {

                Session session = Session.getInstance(sysProps, null);

                Store store = session.getStore();

                store.connect(hostName, username, password);

                Folder emailBox = store.getFolder(mailFolderName);

                emailBox.open(Folder.READ_WRITE);

                messageCount = emailBox.getMessageCount();

                System.out.println("Total Message Count: " + messageCount);

                unreadMsgCount = emailBox.getNewMessageCount();

                System.out.println("Unread Emails count:" + unreadMsgCount);

                for(int i=messageCount; i>(messageCount-unreadMsgCount); i--)

                {

                    emailMessage = emailBox.getMessage(i);

                    emailSubject = emailMessage.getSubject();

                    if(emailSubject.contains(emailSubjectContent))

                    {

                        System.out.println("OTP mail found");

                        String line;

                        StringBuffer buffer = new StringBuffer();

                        BufferedReader reader = new BufferedReader(new InputStreamReader(emailMessage.getInputStream()));

                        while ((line = reader.readLine()) != null) {

                            buffer.append(line);

                        }

                        String messageContent=emailContent;

                        String result = buffer.toString().substring(buffer.toString().indexOf(messageContent));

                        searchText = result.substring(messageContent.length(), messageContent.length()+lengthOfOTP);

                        System.out.println("Text found : "+ searchText);

                        emailMessage.setFlag(Flags.Flag.SEEN, true);

                        break;

                    }

                    emailMessage.setFlag(Flags.Flag.SEEN, true);

                }

                emailBox.close(true);

                store.close();


            } catch (Exception mex) {

                mex.printStackTrace();

                System.out.println("OTP Not found ");

            }

            return searchText;

        }

说明:mailFolderName(例如-“收件箱”),emailSubjectContent(例如-动态口令邮件),emailContent(例如-动态口令是111111),动态口令长度(例如- 6),因为我的激活码是6位。

代码检查outlook邮件,并检查带有主题的邮件(例如: OTP邮件)中最近未读的邮件。打开选定的邮件并返回OTP

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53913947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档