def check_for_otp()

in issues/285/user_tool.py [0:0]


    def check_for_otp(self, recipient: str = None, retries=5, delay=5):
        """
        Check for OTP in the Gmail inbox.
        """
        try:
            mail = imaplib.IMAP4_SSL("imap.gmail.com")
            mail.login(self.original_email, self.password)

            for _ in range(retries):
                mail.select("inbox")
                status, messages = mail.search(None, '(UNSEEN SUBJECT "Expensify magic sign-in code:")')

                if status == "OK":
                    email_ids = messages[0].split()
                    if email_ids:
                        latest_email_id = email_ids[-1]
                        status, msg_data = mail.fetch(latest_email_id, "(RFC822)")

                        for response_part in msg_data:
                            if isinstance(response_part, tuple):
                                msg = email.message_from_bytes(response_part[1])

                                if recipient and msg["To"] != recipient:
                                    continue

                                otp_code = self._extract_otp_from_email(msg)
                                if otp_code:
                                    mail.store(latest_email_id, "+FLAGS", "\\Deleted")
                                    mail.expunge()
                                    mail.close()
                                    mail.logout()
                                    return otp_code

            mail.close()
            mail.logout()
            print("Max retries reached. No OTP found.")
            return None

        except imaplib.IMAP4.error as e:
            print(f"Failed to connect to Gmail: {e}")
            return None