我正在自动化一个网页,用于注册,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/