o `'@s ddlmZeddlmZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlmZzddlmZWnYe jjdkrYddlZeje _ddlmZddlmZdd lTddlZGd d d ejjZej d eej d eejj!"d d gdS))standard_library)inputN)Parser)default)config)log)*c@sdeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS) ImapBackendcCstjj||td|jj|j|j |j f||_ |j dur't t d}n|j }|js?dtjvr9tjd}n td}n|j}||_ ||_|dS)Nz)I'm %s (scheme %s) connecting to %s as %szEnter account userid: IMAP_PASSWORDzEnter account password: ) duplicitybackendBackend__init__rDebug __class____name__schemehostnameusernameurlevalrpasswordosenvirongetgetpassresetConnection)self parsed_urlrrr @/usr/lib/python3/dist-packages/duplicity/backends/imapbackend.pyr8s     zImapBackend.__init__cCs|j}ztjd}Wn ty|j}Ynwz|jWn ty'Ynw|jdkr7t j }||d|_n|jdkrEt j }||d|_t d|jtdd|jd |_tjsq|j|j|j|jtjt d dS|j|jd |j|j|jtjt d dS) N IMAP_SERVERimapimapsizType of imap class: %sz^/zIMAP connected@)rrrKeyErrorrconnclose ExceptionrimaplibIMAP4 IMAP4_SSLrrrresubpath remote_dirrimap_full_addressloginrrselect imap_mailboxInfo)rr imap_serverclr r r!rTs4      zImapBackend.resetConnectioncCs^tjj}|j|d<||d<tjjdd}||tj || || S)NFromSubject applicationbinary) emailmime multipart MIMEMultipartr3decodeMIMEBase set_payloadreadencoders encode_base64attach as_string)rfrnamempar r r! prepareBodyus     zImapBackend.prepareBodyc Cs|d}tj}|dkrd}|dkrz!|j||||}|jtj|jtjdd|WnQt j j t j t jfy|d8}td|td|dkr~z|Wn"t j j t j t jfyy|d8}tdtdYnw|dksUYnw|dkstd|dS) Nrbr@ r'z#Error saving '%s', retrying in 30s $Error reconnecting, retrying in 30s z"IMAP mail with '%s' subject stored)openrtimeoutr*r6rOr7appendencoder-r.abortsocketerrorsslerrorrr8timesleepr)r source_pathremote_filenamerKallowedTimeoutbodyr r r!_puts:     zImapBackend._putc Cstj}|dkr d}|dkrzW|jtj|jdd|\}}|dkr)t|d|ddkr3td|j|dd\}}|dkrHt|d|dd}t}| | }| d} | j d d } WnQt j jtjtjfy|d8}td |td |dkrz|Wn"t j jtjtjfy|d8}td td Ynw|dksYnw|dks |d} | | | |td|dS)NrrQr<OKr&zno mail with subject %sz(RFC822)r'T)rCz$Error loading '%s', retrying in 30s rRrSwbz#IMAP mail with '%s' subject fetched)rrUr*r6r7searchr,fetchrparsestrrC get_payloadr-r.rXrYrZr[rr8r\r]rrTwriter+setdata) rr_ local_pathr`resultflistrawbodypmrMratfiler r r!_getsT         & zImapBackend._getc CsXg}|jtj\}}|dkrt|d|jdd|j\}}|dkr*t|d|ddkr2|S|d d}d|d|df}|j |d\}}|dkrXt|d|D]O}t |d krcqZt j jd krwttd |d d }n t|d d }|d }|d} | durtd|jd| r||td|| fqZ|S)NrcrFROM s%s:%sz(BODY[HEADER])r'r)policyzunicode-escapesubjectfrom^$zIMAP flist: %s %s)r*r6rr7BackendExceptionrer3r,stripsplitrflensys version_infomajorrrrgrCr0compilematchrVrr8) rretrlrmnumssetmsgheaderssubj header_fromr r r!_lists8       zImapBackend._listcGs$||\}}|dkrt|d|S)Nrcr)r,)rfunargsrrmr r r!imapfs  zImapBackend.imapfcCs||jj|dddS)Nz+FLAGSz\DELETED)rr*store)rir r r!delete_single_mailszImapBackend.delete_single_mailcCs||jj}dSN)rr*expunge)rrmr r r!rszImapBackend.expungecCs~|D]-}||jjdd|}|d}t|dkr/|ddkr/||dtd|q|tdt|dS)Nz (SUBJECT %s)rr&zmarked %s to be deletedzIMAP expunged %s files) rr*rer~rrrNoticer)r filename_listfilenamermr r r! _delete_lists zImapBackend._delete_listcCs&|jtj|j|jdSr)r*r6rr7r+logout)rr r r!_closes zImapBackend._closeN)r __module__ __qualname__rrrOrbrrrrrrrrr r r r!r 7s!1& r r#r%)#futurerinstall_aliasesbuiltinsrr?email.encodersemail.mime.multipartrr-rr0rYrr\ email.parserr email.policyrrrsslSSLErrorr[r rrduplicity.errorsduplicity.backendr rr register_backend uses_netlocextendr r r r!s<      b