Search code examples
pythonpython-3.xrobotframeworkimaplib

How to parse email body with Robot Framework


I'm tryin to parse a specific string from an email(gmail) using the ImapLibrary2 in Robot Framework.

Here is the code I'm trying to use -

Email Parsing

Open Mailbox    host=imap.gmail.com    user=testing.abc@gmail.com    password=Secret
${LATEST} =     Wait For Email    sender=support@abc.net    timeout=60
${HTML} =       Get Email Body    ${LATEST}
${Paser_Body}=  Get Regexp Matches    ${HTML}    ^.*([a-zA-Z]+(\d[a-zA-Z]+)+).*$
Log    ${Paser_Body}
Close Mailbox

And the email body is-

Reset Your Password
To reset the password for the user account associated with your email, use the code below and follow the procedure on the application. If you don't want to reset your password, please disregard this email.

ASNjfO24j6RrwKg6PP3scO1EeivA88



Thanks,
Abc Support Team

I want to extract the token ASNjfO24j6RrwKg6PP3scO1EeivA88 from the email, but run the code, I get a null output.

Output-

Starting test: Test.Email Parsing 
20210317 11:53:21.493 :  INFO : ${LATEST} = 29 
20210317 11:53:21.630 :  INFO :   ${HTML} = 
        <tbody>     
            <tr>        
               <td style="padding:40px 0  0 0;">            
                  <p style="color:#000;font-size: 16px;line-height:24px;font-family:'HelveticaNeue','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:no...  
20210317 11:53:21.630 :  INFO : ${Paser_Body} = []  
20210317 11:53:21.630 :  INFO : []  
Ending test: Test .Email Parsing

What am I doing wrong?


Solution

  • I was able to parse the required element by-

    Step 1: Remove unnecessary string using Regular Expression
    Step 2: Splitting the string
    Step 3: Getting the required element from the list

    Here is the sample code-

    Open Mailbox    host=imap.gmail.com    user=testing.abc@gmail.com    password=Secret
    ${LATEST} =     Wait For Email    sender=support@abc.net    timeout=60
    ${HTML} =       Get Email Body    ${LATEST}
    ${Paser_Body}=  Remove String Using Regexp    ${HTML}    (<.*?>)    #remove tags
    ${Parsed_Token}=    Split String    ${Parser_Body_Text}
    ${Parsed_Token}=    Get From List    ${Parsed_Token}    20  #position in the list
    Close Mailbox