Pergunta

Nos últimos dias, tenho trabalhado na escrita de um script que analisa tickets de suporte técnico gerados automaticamente e armazena seu conteúdo em um banco de dados.Durante o teste, encontrei vários e-mails que parecem estar codificados e causando falha no script.Abaixo está um exemplo de um dos RFC822s:

"[(b'9255 (RFC822 {12558}}', b'Delivered-To:XXXXXXXXX Recebido:por 10.220.77.132 com ID SMTP g4csp176213vck; Seg, 28 de julho de 2014 09:37:05 -0700 (PDT) X-Recebido:por 10.67.30.130 com ID SMTP ke2mr39896936pad.44.1406565425185; Seg, 28 de julho de 2014 09:37:05 -0700 (PDT) Caminho de retorno: Recebido:de XXXXXXXXX (XXXXXXXXX [74.125.149.112]) por XXXXXXXXX com ID SMTP yh3si18379315pab.170.2014.07.28.09.37.04 para ; Seg, 28 de julho de 2014 09:37:04 -0700 (PDT) SPF recebido:nenhum (XXXXXXXXX:XXXXXXXXX não designa hosts remetentes permitidos) client-ip=74.125.149.141; Resultados de autenticação:XXXXXXXXX; spf=neutro (XXXXXXXXX:XXXXXXXXX não designa hosts remetentes permitidos) v Recebido:de XXXXXXXXX ([74.125.149.141]) por XXXXXXXXX ([74.125.148.10]) com SMTP; Seg, 28 de julho de 2014 16:37:04 GMT Recebido:de XXXXXXXXX ([209.85.213.178]) (usando TLSv1) por XXXXXXXXX ([74.125.148.12]) com SXXXXXXXXX;Seg, 28 de julho de 2014 09:37:04 PDT Recebido:por XXXXXXXXX com ID SMTP uq10sf3897971igb.11 para ;Seg, 28 de julho de 2014 09:37:03 -0700 (PDT) X-Google-DKIM-Signature:v=1;a=rsa-sha256;c=relaxado/relaxado; d=1e100.net;s=20130820; h=x-gm-message-state:mime-version:from:to:date:subject:message-id :x-original-sender:x-original-authentication-results :precedence :mailing-list:list-id:list-post:list-help:list-archive :list-unsubscribe:content-type:content-transfer-encoding; bh = H + FlcmWQAFURCHnDFK / bNHUOvofUAPB8bcDYlBceyxE =; ol+lbWJBZWvgN4BQPgHJwCF6EaHYf3h8j4tq /KAZIkXowz4/WKW8STri4BVjlA2a4LPwV/wazP+I9Kvr1yz433ymd+iCY1V0NexTI+cb 9m3IyL8sqB0+Efyu+XQrR2y 7ZdXDPwdzGS /WNHJBtKga5xPDtPga+21pozVMCbuCc/cj Cx9me6cVo19PrNKIOtSimDZ1u6ELdpVr4iprYQSaT8arYYiCPHJE34OFPlqspTxjm1eI ngyg== X-Gm-Message-State:ALoCoQkb908wRLWedDE+CtRzjD6VwC6Nja6duttyoVAdf+TFFn+uCxFB0Kwd5jk411YWdMD2G6HuFeRj2y3q7EzTe/vTvPLfymDIkHwZQa1r1zQ8I1B254t6v01ourR8InF/41aPGnnD X- Recebido:por 10.42.48.74 com ID SMTP r10mr26049776icf.18.1406565423564; Seg, 28 de julho de 2014 09:37:03 -0700 (PDT) X-Recebido:por 10.42.48.74 com ID SMTP r10mr26049775icf.18.1406565423537; Seg, 28 de julho de 2014 09:37:03 -0700 (PDT) X-BeenThere:XXXXXXXXX Recebido:por 10.50.153.15 com ID SMTP vc15ls1961411igb.42.gmail;Seg, 28 de julho 2014 09:37:03 -0700 (PDT) X-Recebido:por 10.66.254.37 com ID SMTP af5mr39703901pad.113.1406565423331; Seg, 28 de julho de 2014 09:37:03 -0700 (PDT) Recebido:de XXXXXXXXX (XXXXXXXXX [74.125.149.158]) por XXXXXXXXX com ID SMTP da9si9190520pdb.425.2014.07.28.09.37.02 para ; Seg, 28 de julho de 2014 09:37:03 -0700 (PDT) SPF recebido:nenhum (XXXXXXXXX:XXXXXXXXX não designa hosts remetentes permitidos) client-ip=207.211.31.47; Recebido:de XXXXXXXXX ([207.211.31.47]) por XXXXXXXXX ([74.125.148.10]) com SMTP; Seg, 28 de julho de 2014 16:37:02 GMT Recebido:de XXXXXXXXX (XXXXXXXXX [129.135.112.43]) (usando TLS) por XXXXXXXXX;Seg, 28 de julho 2014 12:37:01 -0400 Recebido:de XXXXXXXXX (129.135.128.210) por XXXXXXXXX (129.135.112.45) com ID de servidor Microsoft SMTP 14.3.181.6;Seg, 28 de julho de 2014 11:36:58 -0500 Recebido:de ITSDC50 ([127.0.0.1]) por XXXXXXXXX com Microsoft SMTPSVC(6.0.3790.4675); Seg, 28 de julho de 2014 11:36:58 -0500 MIME-Version:1.0 De: Para: Data:Seg, 28 de julho de 2014 11:36:58 -0500 Assunto:Despachando Caso de TI/Cares:SC-118656-7031 ID da mensagem: X-OriginalArrivalTime:28 de julho de 2014 16:36:58.0498 (UTC) FILETIME=[26792E20:01CFAA82] X-MC-Único:114072812370105901 Níveis X-pstn:(S:85.19264/99.90000 CV:99.9000 FC:95.5390 LC:95.5390 R:95.9108 P:95.9108 M:97.0282 C:98.6951 ) X-pstn-dkim:0 ignorado:não habilitado X-pstn-settings:1 (0,1500:0,1500) cv gt6 gt5 gt4 gt3 gt2 gt1 X-pstn-addresses:de [1094/49] X-pstn-nxpr:disp=neutro, envrcpt=XXXXXXXXX X-pstn-nxp:bodyHash=9500f76054cf97c2a0eec20f8940768958faf6c3, headerHash=eb9362a172738328a8b8a8ae406c42a63f5545f9, keyName=4, rcptHash=e0dd4695780dcb1818e78b48244 7ac976870bcbe, sourceip=207.211.31.47, versão=1 X-Original-Sender:XXXXXXXXX X-Resultados de autenticação original:XXXXXXXXX;spf=neutro (XXXXXXXXX:XXXXXXXXX não designa remetentes permitidos hosts) smtp.mail=XXXXXXXXX Precedência:lista Lista de discussão:lista XXXXXXXXX contato XXXXXXXXX List-ID: X-ID do grupo do Google:511158325204 Postagem na lista:, Lista-Ajuda:, Arquivo de lista: Lista-Cancelar inscrição:, Tipo de conteúdo:texto/simples;charset=UTF-8 Codificação de transferência de conteúdo:base64 X-pstn-netuno:0/0/0,00/0 Níveis X-pstn:(S:65.87536/99.90000 CV:99.9000 FC:95.5390 LC:95.5390 R:95.9108 P:95.9108 M:97.0282 C:98.6951 ) X-pstn-dkim:0 ignorado:não habilitado X-pstn-settings:5 (2.0000:0.0200) s cv fc lc gt6 gt5 gt4 GT3 gt2 gt1 ft lt r p m c X-pstn-addresses:de [db-null] X-pstn-nxpr:disp=neutro, envrcpt=XXXXXXXXX X-pstn-nxp:bodyHash=45f4f2e59005199791055b3d1f937e1d3fb7d7ca, headerHash=ca981838d5783da04d9d38e3fffc3f5907100fcf, keyName=4, rcptHash=4f3dee680a09495dc5b095849a4225f49c4a45f4, sourceip=74.125.149.141, version=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 rnDQoqKioqKkRBV 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rn'), b ')'] "

O corpo do e-mail está codificado?e em caso afirmativo, como devo lidar com a decodificação?

Foi útil?

Solução

O corpo é codificado (Content-Transfer-Encoding:base64) que não é o mesmo que criptografado.Colando o primeiro conjunto de caracteres em um decodificador online

Q2FzZSBOdW1iZXI6ICAgICAgICAgU0MtMTE4NjU2LTcwMzENClNldmVyaXR5IExldmVsOiAg

é decodificado como

Case Number:         SC-118656-7031
Severity Level:  

Python possui bibliotecas para decodificar base64, mas eu ficaria desapontado se o imaplib não tivesse um recurso interno para simplificar isso.

Outras dicas

Você pode usar o email pacote para isso.Você tem uma lista lá, e o primeiro item da lista é uma tupla, da qual o segundo elemento é a mensagem de email inteira.Digamos que você tenha esse objeto bytes em uma variável chamada msg_bytes.Você pode então analisar a mensagem usando:

import email.parser
msg = email.parser.BytesParser().parsebytes(msg_bytes)

Você pode então acessar diferentes partes da mensagem (consulte a documentação em email.message.Message):

# get a bytes object containing the base64-decoded message
textbytes = msg.get_payload(decode=True)

# get the content charset
content_charset = msg.get_content_charset()

# decode the text to obtain a string object
text = textbytes.decode(content_charset)

Isso será capaz de lidar com a maioria, senão todos, os e-mails válidos.

Tentar Imbox, aqui você não precisa consertar codecs

Porque imaplib é uma biblioteca de baixo nível muito excessiva e retorna resultados difíceis de trabalhar

Instalação

pip install imbox

Uso

from imbox import Imbox

with Imbox('imap.gmail.com',
        username='username',
        password='password',
        ssl=True,
        ssl_context=None,
        starttls=False) as imbox:

    all_inbox_messages = imbox.messages()
    for uid, message in all_inbox_messages:
        message.sent_from
        message.sent_to
        message.body
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top