我正在自动化一个网页,其中需要通过电子邮件发送OTP以进行验证。我想从电子邮件中获取OTP并将其打印在文本字段上。
请指教。
请指教。
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。
有两种可能的方法可以采取。
考虑普通终端用户的工作流程。 OTP必须在应用程序中生成并存储在某个位置,以便当用户使用OTP重新登录时,应用程序可以对其进行验证。您应该能够与开发人员合作确定如何从数据库中检索OTP,并可能使用jdbc连接。
为了使此过程更简洁,您可以要求开发人员公开一个API(仅限测试?),您可以使用该API来获取OTP。
这可能是较简单的选择。
在测试环境中,您可以配置一个轻量级的电子邮件服务器,比如MailHog,它没有复杂的登录过程,并且具有直接访问任何电子邮件的简单API。
这个选项需要在您的测试环境中进行配置更改,但它可以让您测试发送出去的电子邮件的全部内容。