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

4
我正在自动化一个网页,其中需要通过电子邮件发送OTP以进行验证。我想从电子邮件中获取OTP并将其打印在文本字段上。
请指教。

2
很不清楚你在问什么。请阅读[如何提出一个好问题](https://stackoverflow.com/help/how-to-ask)的 SO 指南,并相应地编辑你的问题。 - Nino Filiu
2个回答

3
以下代码可用于从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;

        }

说明:mailFolderName(例如-“INBOX”),emailSubjectContent(例如- OTP邮件的主题),emailContent(例如- OTP为111111),OTP长度(例如-我的激活码是6位数字)。

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


0

有两种可能的方法可以采取。

1. 直接从应用程序中检索OTP

考虑普通终端用户的工作流程。 OTP必须在应用程序中生成并存储在某个位置,以便当用户使用OTP重新登录时,应用程序可以对其进行验证。您应该能够与开发人员合作确定如何从数据库中检索OTP,并可能使用连接。

为了使此过程更简洁,您可以要求开发人员公开一个API(仅限测试?),您可以使用该API来获取OTP。

这可能是较简单的选择。

2. 使用轻量级邮件服务器

在测试环境中,您可以配置一个轻量级的电子邮件服务器,比如MailHog,它没有复杂的登录过程,并且具有直接访问任何电子邮件的简单API。

这个选项需要在您的测试环境中进行配置更改,但它可以让您测试发送出去的电子邮件的全部内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接