0

I tried one sample program for getting an email message in outlook account using IMAP. In this account, I have 20 folders its getting all email messages except these folders (contact, calendar, task) not getting data its throwing server error. How to fix this error.

Code

import imaplib
import pprint
import email
import base64
import json
import re
import os
import fileinput
imap_host = 'outlook.office365.com'
imap_user = 'XXXXXXXXXXX'
imap_pass = 'XXXXXXXXXXXXX'


count = 0
file_path = 'geek.txt'
# connect to host using SSL
imap = imaplib.IMAP4_SSL(imap_host,993)

# login to server
l = imap.login(imap_user, imap_pass)

# Get Flags,mailbox_name,delimiter using regex 
list_response_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')

# Get List of Sync folders
list_data = imap.list()

# Check Local Storage is empty Sync All Folders Details.
print(os.stat(file_path).st_size)
if os.stat(file_path).st_size == 0:
    global day
    # Iterate folders in Sync folder
    for i in list_data[1]:
        # Get Folder name
        sample = re.findall('"\/"(.*)',i.decode("utf-8"))
        # Get Message_ids
        try:
            print("message")
            print(sample[0].lstrip().strip('"'))
            data = imap.select(sample[0].lstrip())
            search_resp, search_data = imap.search( None,  "ALL" )
            match = list_response_pattern.match(i.decode("utf-8"))
            flags, delimiter, mailbox_name = match.groups()
            print("1")
            print(mailbox_name)
            mailbox_name = mailbox_name.strip('"')
            print(mailbox_name)
        except Exception as e:
            print(e)
            continue
        # Get Current Status of Folder
        current_status = imap.status(
                '"{}"'.format(mailbox_name),
                '(MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)',
        )
        print(current_status)
        # Get message using UID and Message_id
        msg_ids = search_data[ 0 ].split()
        print("total count: ",len(msg_ids))
        for i in msg_ids:
            print("$$$$$$$$$$$$$$$$$$$$")
            print("Message Ids: ", i)
            count = count + 1
            fetch_resp, fetch_UID = imap.fetch( i, 'UID' )
            print("Fetch UID: ", fetch_UID)
            day = bytes(str(fetch_UID[0].split()[2]).split("'")[1].split(')')[0],'utf-8')
            print("ID: ",day)
            fetch_resp, fetch_mdg = imap.uid('fetch', day, '(RFC822)')
            print(fetch_mdg)
            print("$$$$$$$$$$$$$$$$$$$$$")
            email_msg = fetch_mdg[0][1]
            if email_msg and isinstance(email_msg, str):
                try:
                    email_msg = email.message_from_string(email_msg)
                except :
                    email_msg = None

            elif email_msg and isinstance(email_msg, bytes):
                try:
                    email_msg = email.message_from_bytes(email_msg)
                except:
                    email_msg = None
            print("*********************************")
            print("Count: ",count)
            print("UID: ",day)
            print(mailbox_name)
            print(email_msg['To'])
            print(email_msg['From'])
            print(email_msg['subject'])
            print(email_msg)
            print("*********************************")
        # Store Folder details in File
        status_details = current_status[1][0].decode("utf-8")
        status_details = status_details.split('(')[1].split(')')[0].split(' ')
        print(status_details)
        if len(msg_ids) == 0:
                json1 = json.dumps({'total_count':int(status_details[1]),'UID':0,'UIDNext':int(status_details[5]),'UIDValidity':int(status_details[7]), 'Folder name':mailbox_name})
        else:
                json1 = json.dumps({'total_count':int(status_details[1]),'UID':int(day),'UIDNext':int(status_details[5]),'UIDValidity':int(status_details[7]), 'Folder name':mailbox_name})  
        file = open(file_path,'a')
        file.write(json1)
        file.write("\n")
        print('hi')

Response

$$$$$$$$$$$$$$$$$$$$
Message Ids:  b'3'
Fetch UID:  [b'3 (UID 11)']
ID:  b'11'
[(b'3 (RFC822 {757}', b'MIME-Version: 1.0\r\nContent-Type: text/plain; charset="us-ascii"\r\nFrom: Microsoft Exchange Server\r\nTo: "\r\nSubject: Retrieval using the IMAP4 protocol failed for the following message:\r\n 11\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\nThe server couldn\'t retrieve the following message:\r\n\r\nSubject: "Test email Sync 3"\r\nFrom: "Imap Testing" ("/O=3DEXCHANGELABS/OU=3DEXCHANGE ADMINISTRATIVE GROUP=\r\n (FYDIBOHF23SPDLT)/CN=3DRECIPIENTS/CN=3DEBF2483D9A0145A59A48B829B12A45E4-MA=\r\nILBOX1")\r\nSent date: 5/6/2020 2:02:59 AM\r\n\r\nThe message hasn\'t been deleted. You might be able to view it using either =\r\nOutlook or Outlook Web App. You can also contact the sender to find out wha=\r\nt the message says.=\r\n'), b' UID 11 FLAGS (\\Seen))']
$$$$$$$$$$$$$$$$$$$$$

Server Error

Subject: Retrieval using the IMAP4 protocol failed for the following message:
 7
Content-Transfer-Encoding: quoted-printable

The server couldn't retrieve the following message:

Subject: "Testing"
Sent date: 5/6/2020 2:01:54 AM

The message hasn't been deleted. You might be able to view it using either =
Outlook or Outlook Web App. You can also contact the sender to find out wha=
t the message says.=

I have around 20 folders I iterate one by one get current status of folder and stored in sample file. Its successfully working.but I tried to print email messages some folders (contact,calender,task) its showing this response.

hari prasanth
  • 716
  • 1
  • 15
  • 35
  • That's not an IMAP response. Could you add your code and the IMAP command and response to your question? – arnt May 06 '20 at 13:44
  • @arnt I added code and response can you please check how to fix this error – hari prasanth May 06 '20 at 14:16
  • The Contacts, Calendars, and Tasks folders don’t store email message data. This may be the servers way of telling you that. – Max May 07 '20 at 13:54

0 Answers0