selenium - 如何使用 Selenium WebDriver 从电子邮件中读取 OTP?

标签 selenium selenium-webdriver automation one-time-password

我正在自动化一个网页,用于注册,otp 被发送到电子邮件进行验证。我想从电子邮件中获取 OTP 并在文本字段上打印。

请指教。

最佳答案

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

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;

        }

说明:
邮件文件夹名称(例如-“收件箱”),电子邮件主题内容(例如,OTP 邮件),
emailContent(Eg- OTP is 111111), OTP length(Eg-6) 因为我的激活码是 6 位数字。

该代码检查 Outlook 邮件并检查最近未读邮件的主题(例如:OTP 邮件)。打开选定的邮件并返回 OTP

关于selenium - 如何使用 Selenium WebDriver 从电子邮件中读取 OTP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913947/

相关文章:

python - WebDriver python 相当于 "refreshed"预期条件

java - 如何使用 Selenium WebDriver 进行拖放操作

ssis - 如何使用命令行从 biml 生成 ssis 包并在服务器上部署 ssis

ios - 是否可以在 iOS 中同时自动化两个应用程序?

vba - 使用 VBA 单击网页上的“提交”按钮

python - 如何检查对象是否存在(Selenium/Python)并执行 if-else

python - 无法找到元素 - 多个元素似乎具有相似且最少的信息,但我无法正确找到

selenium - 使用 Selenium 2 执行复制和粘贴

javascript - 禁用 JavaScript 时的 WebdriverIO 自动化测试

selenium-webdriver - 如何在 Allure 报告中对测试步骤进行分组