Multipart Content Transfer Encoding Binario Opcoes




Estou escrevendo um servidor web simples em python que permite ao usuario carregar um arquivo usando multipartform-data. Tanto quanto eu posso dizer, os dados MIME multipart e suposto ser baseado em linha. Por exemplo, o limite tem de estar no inicio de uma linha. Eu nao consigo descobrir como os dados binarios sao tratados a este respeito. Meu cliente (Firefox) nao esta codificando-o em 7 bits ASCII ou qualquer coisa, e apenas seus dados binarios brutos seu envio. Sera que dividir os dados em linhas em locais arbitrarios Existe um comprimento de linha maximo especificado para dados de partes multiplas Ive tentou olhar atraves da RFC para multipartform-dados, mas nao encontrou nada. Perguntou Mar 27 13 at 16:54 Depois de cavar atraves do RFCs, acho que finalmente consegui tudo direto na minha cabeca. As partes do corpo (isto e, o conteudo do corpo de uma parte individual numa mensagem de varias partes) apenas precisam de ser baseadas em linhas, uma vez que o limite no final da parte comeca com um CRLF. Mas caso contrario, os dados nao precisam ser baseados em linha, e se o conteudo acontece com linebreaks nele, nao ha distancia maxima entre eles, nem eles precisam ser escapados de qualquer maneira (bem, a menos que talvez o Content-Transfer - A codificacao e quoted-string). As opcoes de 7 bits, 8 bits e binarias para Content-Transfer-Encoding nao indicam realmente que qualquer codificacao foi feita nos dados (e, portanto, nenhuma codificacao precisa ser desfeita), eles significam apenas para indicar o tipo de dados Voce pode esperar para ver na parte do corpo. O que eu estava realmente comecando em minha pergunta mal expressa era como readbuffer os dados do soquete para que eu pudesse ter certeza de que eu peguei o limite, e sem ter que ter um buffer arbitrariamente grande (por exemplo, se nao aconteceu ser nenhum linebreaks em O conteudo, e assim um readline acabou buffering a coisa toda). O que eu acabei fazendo foi buffer do soquete com um readline usando um comprimento maximo, entao o buffer nunca seria mais longo do que isso, mas tambem iria certificar-se de terminar se um linebreak foi encontrado. Isso garantiu que quando o limite veio (apos um CRLF), seria no inicio do buffer. Eu tive que fazer um pouco de monkeying extra ao redor para garantir que eu nao inclua esse CRLF final no conteudo real do corpo, porque de acordo com o RFC e necessario antes da fronteira e, portanto, nao faz parte do conteudo em si. Tente rever o RFC 2045. Normalmente, o conteudo binario e convertido em BASE64 pela sua aplicacao e incluido na mensagem de varias partes usando Content-Transfer-Encoding. Base64. Existem outros mecanismos para transferir dados binarios, mas isso e bastante comum. Os dados binarios sao convertidos em octetos e fragmentados em cadeias de comprimento arbitrarias (dependendo da variante de codificacao - veja o link BASE64 acima). O aplicativo receptor, em seguida, decodifica-lo para o conteudo binario original. Eu nao sou um programador python, mas eu ficaria surpreso que voce realmente tinha que codificar qualquer um deste voce mesmo. Eu suspeito que existem funcoes de biblioteca pre-construidas em python para fazer isso por voce. Respondeu Mar 27 13 at 17:43 Obrigado, eu estava olhando para um RFC diferente que nao foi tao informativo. Eu tambem encontrei RFC 2046 que especificamente define multi-part mensagens na secao 5. Nota there39s um pouco de uma sutileza nestes RFCs que atraves de mim off: ele diz multipart mensagens nao podem ter outras codificacoes de 7 bits, 8 bits e binario (Ie nao Base-64). No entanto, ele continua a dizer que as partes individuais dentro da multi peca pode ter la proprias codificacoes de conteudo, entao voce esta correto que Base-64 e possivel. Ndash brianmearns Mar 28 13 at 13:20 Sua resposta 2017 Stack Exchange, Inc5 O Content-Transfer-Encoding Header Field Muitos tipos de conteudo que poderiam ser transportados via e-mail sao representados, em seu formato natural, como caracteres de 8 bits ou binarios dados. Tais dados nao podem ser transmitidos atraves de alguns protocolos de transporte. Por exemplo, RFC 821 restringe mensagens de correio electronico para 7-bit dados US-ASCII com 1000 caracteres linhas. E necessario, portanto, definir um mecanismo padrao para re-codificar esses dados em um formato de linha curta de 7 bits. Este documento especifica que essas codificacoes serao indicadas por um novo cabecalho Content-Transfer-Encoding campo. O campo Content-Transfer-Encoding e usado para indicar o tipo de transformacao que foi usado para representar o corpo de forma aceitavel para o transporte. Diferentemente dos Content-Types, uma proliferacao de valores Content-Transfer-Encoding e indesejavel e desnecessaria. No entanto, o estabelecimento de apenas um unico mecanismo Content-Transfer-Encoding nao parece possivel. Existe um compromisso entre o desejo de uma codificacao compacta e eficiente de dados em grande parte binarios e o desejo de uma codificacao legivel de dados que sao, principalmente, mas nao inteiramente, dados de 7 bits. Por este motivo, pelo menos dois mecanismos de codificacao sao necessarios: uma codificacao legivel e uma codificacao densa. O campo Content-Transfer-Encoding e projetado para especificar um mapeamento invertible entre a representacao nativa de um tipo de dados e uma representacao que pode ser facilmente trocada usando protocolos de transporte de correio de 7 bits, como aqueles definidos pelo RFC 821 (SMTP). Este campo nao foi definido por qualquer padrao anterior. O valor de campos e um token unico que especifica o tipo de codificacao, conforme enumerado abaixo. Formalmente: Esses valores nao sao sensiveis a maiusculas e minusculas. Ou seja, Base64 e BASE64 e bAsE64 sao todos equivalentes. Um tipo de codificacao de 7BIT exige que o corpo ja esteja em uma representacao de sete bits pronta para envio. Esse e o valor padrao - ou seja, Content-Transfer-Encoding: 7BIT e assumido se o campo de cabecalho Content-Transfer-Encoding nao estiver presente. Os valores 8bit, 7bit e binario implicam que a codificacao NO foi executada. No entanto, sao potencialmente uteis como indicacoes do tipo de dados contidos no objecto e, portanto, do tipo de codificacao que pode necessitar de ser executada para transmissao num dado sistema de transporte. 7bit significa que os dados sao todos representados como linhas curtas de dados US-ASCII. 8bit significa que as linhas sao curtas, mas pode haver caracteres nao-ASCII (octetos com o bit de alta ordem definido). Binario significa que nao so podem estar presentes caracteres nao-ASCII, mas tambem que as linhas nao sao necessariamente curtas o suficiente para o transporte SMTP. A diferenca entre 8 bits (ou qualquer outro token de largura de bits concebivel) eo token binario e que o binario nao exige aderencia a quaisquer limites no comprimento da linha ou a semantica SMTP CRLF, enquanto os tokens de largura de bits requerem tal aderencia. Se o corpo contiver dados em qualquer largura de bit diferente de 7 bits, o token de Content-Transfer-Encoding de bit-width apropriado deve ser usado (por exemplo, 8 bits para dados nao codificados de 8 bits de largura). Se o corpo contiver dados binarios, o token binario Content-Transfer-Encoding deve ser usado. A distincao entre os valores Content-Transfer-Encoding de binario, 8bit, etc. pode parecer sem importancia, na medida em que todos eles realmente significam nenhum - ou seja, nao houve codificacao dos dados para o transporte. No entanto, uma rotulagem clara sera de enorme valor para gateways entre futuros sistemas de transporte de correio com capacidades diferentes no transporte de dados que nao atendam as restricoes do transporte RFC 821. Desde a publicacao deste documento, nao existem transportes Internet padronizados para os quais e legitimo incluir dados nao codificados de 8 bits ou binarios em corpos de correio. Assim, nao ha circunstancias em que o 8bit ou binario Content-Transfer-Encoding e realmente legal na Internet. No entanto, no caso em que o transporte de 8 bits ou de correio binario se torna uma realidade no correio da Internet ou quando este documento e utilizado em conjunto com qualquer outro mecanismo de transporte de 8 bits ou binario, os corpos de 8 bits ou binarios devem ser identificados Como tal utilizando este mecanismo. Os cinco valores definidos para o campo Content-Transfer-Encoding nao implicam nada sobre o Content-Type diferente do algoritmo pelo qual foi codificado ou os requisitos do sistema de transporte se nao codificados. Os implementadores podem, se necessario, definir novos valores Content-Transfer-Encoding, mas devem usar um token x, que e um nome prefixado por X - para indicar seu status nao padrao, p. Content-Transfer-Encoding: x-my-new-encoding. No entanto, ao contrario de Content-Types e subtipos, a criacao de novos Content-Transfer-Encoding valores e explicitamente e fortemente desencorajados, pois parece ser susceptivel de dificultar a interoperabilidade com pouco beneficio potencial. A sua utilizacao e permitida apenas como resultado de um acordo entre agentes utilizadores que colaboram. Se um campo de cabecalho Content-Transfer-Encoding aparece como parte de um cabecalho de mensagem, ele se aplica a todo o corpo dessa mensagem. Se um campo de cabecalho Content-Transfer-Encoding aparece como parte de um cabecalho de partes do corpo, ele se aplica somente ao corpo dessa parte do corpo. Se uma entidade e de tipo multipart ou mensagem, a Content-Transfer-Encoding nao tem permissao para ter qualquer valor diferente de uma largura de bit (por exemplo, 7 bits, 8 bits, etc.) ou binario. Deve-se notar que o e-mail e orientado a caracteres, de modo que os mecanismos descritos aqui sao mecanismos para codificar fluxos de bytes arbitrarios, nao fluxos de bits. Se um fluxo de bits deve ser codificado atraves de um desses mecanismos, ele deve primeiro ser convertido em um fluxo de bytes de 8 bits usando a ordem de bits padrao da rede (big-endian), em que os bits anteriores em um fluxo tornam - Bits de ordem em um byte. Um fluxo de bits que nao termina em um limite de 8 bits deve ser preenchido com zeros. Este documento fornece um mecanismo para observar a adicao de tal preenchimento no caso do aplicativo Content-Type, que tem um padding parametro. Os mecanismos de codificacao aqui definidos explicitamente codificam todos os dados em ASCII. Assim, por exemplo, suponha que uma entidade tenha campos de cabecalho como: Isto deve ser interpretado como significando que o corpo e uma codificacao ASCII base64 de dados que estava originalmente em ISO-8859-1 e estara nesse conjunto de caracteres novamente apos a descodificacao . As secoes a seguir definirao os dois mecanismos padrao de codificacao. A definicao de novas codificacoes de transferencia de conteudo e explicitamente desencorajada e so deve ocorrer quando absolutamente necessario. Todo o espaco de nomes de codificacao de transferencia de conteudo exceto aquele comecando com X - e explicitamente reservado a IANA para uso futuro. Os acordos privados sobre encoding de transferencia de conteudo tambem sao explicitamente desencorajados. Determinados valores de Content-Transfer-Encoding so podem ser utilizados em determinados Content-Types. Em particular, e expressamente proibido usar qualquer codificacao diferente de 7bit, 8bit ou binario com qualquer Content-Type que recursivamente inclua outros campos de Content-Type, notadamente o multipart e message Content-Types. Todas as codificacoes que sao desejadas para corpos de tipo multipart ou mensagem devem ser feitas no nivel mais interno, codificando o corpo real que precisa ser codificado. OBSERVACAO SOBRE AS RESTRICOES DE CODIFICACAO: Embora a proibicao de usar codificacoes de transferencia de conteudo em dados de tipo multipart ou mensagem possa parecer excessivamente restritiva, e necessario evitar codificacoes aninhadas, nas quais os dados sao passados ??por um algoritmo de codificacao varias vezes e devem ser Decodificado varias vezes para ser visualizado corretamente. As codificacoes aninhadas acrescentam consideravel complexidade aos agentes do usuario: alem dos obvios problemas de eficiencia com tais codificacoes multiplas, elas podem obscurecer a estrutura basica de uma mensagem. Em particular, podem implicar que varias operacoes de descodificacao sao necessarias simplesmente para descobrir que tipos de objetos uma mensagem contem. A proibicao de codificacoes aninhadas pode complicar o trabalho de determinados gateways de email, mas isso parece menos um problema do que o efeito de codificacoes aninhadas nos agentes do usuario. NOTA SOBRE A RELACAO ENTRE TIPO DE CONTEUDO E CONTEUDO - TRANSFER-ENCODING Pode parecer que a Content-Transfer-Encoding poderia ser inferida a partir das caracteristicas do Content-Type a ser codificado ou, no minimo, que determinadas Content-Transfer-Encodings poderia ser obrigatorio para uso com tipos de conteudo especificos. Existem varias razoes pelas quais este nao e o caso. Em primeiro lugar, dados os diferentes tipos de transportes utilizados para correio, algumas codificacoes podem ser apropriadas para algumas combinacoes Content-Typetransport e nao para outras. (Por exemplo, em um transporte de 8 bits, nenhuma codificacao seria necessaria para o texto em determinados conjuntos de caracteres, enquanto essas codificacoes sao claramente exigidas para SMTP de 7 bits.) Segundo, certos tipos de conteudo podem exigir diferentes tipos de codificacao de transferencia em Circunstancias diferentes. Por exemplo, muitos corpos PostScript podem consistir inteiramente de linhas curtas de dados de 7 bits e, portanto, requerem pouca ou nenhuma codificacao. Outros corpos PostScript (especialmente aqueles que usam o mecanismo de codificacao binaria PostScripts nivel 2) so podem ser razoavelmente representados usando uma codificacao de transporte binario. Finalmente, uma vez que o Content-Type pretende ser um mecanismo de especificacao aberto, a especificacao estrita de uma associacao entre Content-Types e codificacoes efetivamente acopla a especificacao de um protocolo de aplicacao com um transporte de nivel inferior especifico. Isso nao e desejavel, uma vez que os desenvolvedores de um Content-Type nao devem ter conhecimento de todos os transportes em uso e quais sao suas limitacoes. NOTA SOBRE AS TRANSFERENCIAS DE CODIFICACOES As codificacoes quoted-printable e base64 sao projetadas para que a conversao entre elas seja possivel. A unica questao que surge em tal conversao e o tratamento de quebras de linha. Ao converter de quoted-printable para base64 uma quebra de linha deve ser convertida em uma sequencia CRLF. Da mesma forma, uma sequencia CRLF em dados base64 deve ser convertida em uma quebra de linha com a impressao entre aspas, mas SOMENTE ao converter dados de texto. NOTA SOBRE O MODELO DE CODIFICACAO CANONICA: Houve alguma confusao, em versoes anteriores deste memorando, com relacao ao modelo para quando os dados de e-mail deveriam ser convertidos para forma canonica e codificados e, em particular, como esse processo afetaria o tratamento de CRLFs, A representacao de novas linhas varia muito de sistema para sistema. Por esta razao, um modelo canonico para codificacao e apresentado como Apendice H. 5.1 Quoted-Printable Content-Transfer-Encoding A codificacao Quoted-Printable destina-se a representar dados que consiste em grande parte de octetos que correspondem a caracteres imprimiveis no conjunto de caracteres ASCII. Ele codifica os dados de tal forma que os octetos resultantes sao improvaveis ??de serem modificados pelo transporte de correio. Se os dados que estao sendo codificados sao principalmente texto ASCII, a forma codificada dos dados permanece em grande parte reconhecivel por seres humanos. Um corpo que e inteiramente ASCII tambem pode ser codificado em Quoted-Printable para garantir a integridade dos dados se a mensagem passar atraves de um caractere de traducao, andor ou linha-wrapping gateway. Nesta codificacao, os octetos devem ser representados conforme determinado pelas seguintes regras: Regra 1: (Representacao geral de 8 bits) Qualquer octeto, exceto aqueles que indicam uma quebra de linha de acordo com a convencao de nova linha da forma canonica dos dados que estao sendo codificados, Pode ser representado por um seguido por uma representacao hexadecimal de dois digitos do valor de octetos. Os digitos do alfabeto hexadecimal, para este fim, sao 0123456789ABCDEF. Letras maiusculas devem ser usadas ao enviar dados hexadecimais, embora uma implementacao robusta possa escolher reconhecer letras minusculas no recebimento. Assim, por exemplo, o valor 12 (ASCII form feed) pode ser representado por 0C, eo valor 61 (ASCII EQUAL SIGN) pode ser representado por 3D. Exceto quando as regras a seguir permitem uma codificacao alternativa, esta regra e obrigatoria. Regra 2: (Representacao literal) Octetos com valores decimais de 33 a 60 inclusive, e 62 a 126 inclusive, PODEM ser representados como os caracteres ASCII que correspondem a esses octetos (EXCLAMATION POINT por LESS THAN, e GRANDE A TILDE, respectivamente ). Regra 3: (Espaco em Branco) Octetos com valores de 9 e 32 MAIO podem ser representados como caracteres ASCII TAB (HT) e espaco, respectivamente, mas nao deve ser assim representado no final de uma linha codificada. Todos os caracteres TAB (HT) ou espaco em uma linha codificada devem ser seguidos nessa linha por um caractere imprimivel. Em particular, um no fim de uma linha codificada, indicando uma quebra de linha suave (ver regra 5) pode seguir um ou mais caracteres TAB (HT) ou SPACE. Segue-se que um octeto com valor 9 ou 32 aparecendo no final de uma linha codificada deve ser representado de acordo com a Regra 1. Esta regra e necessaria porque alguns MTAs (Message Transport Agents, programas que transportam mensagens de um usuario para outro ou executam Uma parte de tais transferencias) sao conhecidos por preencher linhas de texto com espacos, e outros sao conhecidos por remover caracteres de espaco em branco a partir do final de uma linha. Portanto, ao decodificar um corpo Citado-Imprimivel, qualquer espaco em branco a direita em uma linha deve ser excluido, uma vez que sera necessariamente adicionado por agentes de transporte intermediarios. Regra 4 (Quebras de linha) Uma quebra de linha em uma parte do corpo do texto, independente da representacao que esta seguindo a representacao canonica dos dados que estao sendo codificados, deve ser representada por uma quebra de linha (RFC 822), que e uma sequencia CRLF A codificacao Quoted-Printable. Se CRs isolados e LFs, ou LF CR e CR LF sequencias sao permitidos a aparecer em dados binarios de acordo com a forma canonica, eles devem ser representados usando o 0D, 0A, 0A0D e 0D0A notacoes, respectivamente. Observe que muitas implementacoes podem optar por codificar a representacao local de varios tipos de conteudo diretamente. Em particular, isso pode se aplicar ao texto simples em sistemas que usam convencoes de nova linha, exceto delimitadores CRLF. Tal implementacao e permitida, mas a geracao de quebras de linha deve ser generalizada para considerar o caso em que sao usadas representacoes alternativas de sequencias de nova linha. Regra 5 (Quebras de linhas suaves) A ??codificacao Quoted-Printable REQUER que as linhas codificadas nao devem ter mais de 76 caracteres. Se as linhas mais longas devem ser codificadas com a codificacao Quoted-Printable, devem ser usadas quebras de linha suaves. Um sinal de igual como o ultimo caractere em uma linha codificada indica uma quebra de linha nao significativa (macio) no texto codificado. Assim, se a forma bruta da linha e uma unica linha nao codificada que diz: Isso pode ser representado, na codificacao Quoted-Printable, como Isso fornece um mecanismo com o qual linhas longas sao codificadas de forma a ser restaurado pelo usuario agente. O limite de 76 caracteres nao conta o CRLF a direita, mas conta todos os outros caracteres, incluindo quaisquer sinais iguais. Uma vez que o caractere de hifen (-) e representado como ele proprio na codificacao Quoted-Printable, cuidado deve ser tomado, quando encapsulando um corpo codificado imprimivel quoted em uma entidade multipart, para garantir que o limite de encapsulamento nao aparece em qualquer lugar no corpo codificado . (Uma boa estrategia e escolher um limite que inclua uma sequencia de caracteres como o que nunca pode aparecer em um corpo de impressao entre aspas. Consulte a definicao de mensagens de multipart mais tarde neste documento.) Observacao: A codificacao quoted-printable representa algo de um Compromissos entre legibilidade e fiabilidade nos transportes. Corpos codificados com a codificacao quoted-printable funcionara de forma confiavel sobre a maioria dos gateways de email, mas pode nao funcionar perfeitamente em alguns gateways, principalmente aqueles que envolvem traducao em EBCDIC. (Em teoria, um gateway EBCDIC poderia decodificar um corpo de impressao citado e re-codifica-lo usando base64, mas esses gateways ainda nao existem.) Um nivel mais alto de confianca e oferecido pelo base64 Content-Transfer-Encoding. Uma maneira de obter um transporte razoavelmente confiavel atraves de gateways EBCDIC e tambem citar os caracteres ASCII de acordo com a regra 1. Consulte o Apendice B para obter mais informacoes. Uma vez que os dados de impressao com aspas sao geralmente assumidos como orientados a linhas, e de se esperar que as quebras entre as linhas de dados imprimiveis cotados possam ser alteradas no transporte, da mesma forma que o correio de texto simples sempre foi alterado no correio da Internet Quando passam entre sistemas com diferentes convencoes de nova linha. Se tais alteracoes sao susceptiveis de constituir uma corrupcao dos dados, e provavelmente mais sensato usar a codificacao base64 em vez da codificacao quoted-printable. 5.2 Base64 Content-Transfer-Encoding O Base64 Content-Transfer-Encoding e projetado para representar sequencias arbitrarias de octetos em uma forma que nao e humanamente legivel. Os algoritmos de codificacao e descodificacao sao simples, mas os dados codificados sao consistentemente apenas cerca de 33 por cento maiores do que os dados nao codificados. Esta codificacao baseia-se na utilizada em aplicacoes de privacidade Enhanced Mail, tal como definido na RFC 1113. A codificacao base64 e adaptado a partir de RFC 1113, com uma alteracao: base64 elimina o mecanismo para incorporado texto claro. Um subconjunto de 65 caracteres de US-ASCII e usado, permitindo que 6 bits sejam representados por caractere imprimivel. NOTA: Este subconjunto tem a propriedade importante que e representado de forma identica em todas as versoes da ISO 646, incluindo o ASCII dos EUA, e todos os caracteres no subconjunto tambem sao representados Identica em todas as versoes do EBCDIC. Outras codificacoes populares, como a codificacao usada pelo utilitario UUENCODE ea codificacao base85 especificada como parte do PostScript Nivel 2, nao compartilham essas propriedades e, portanto, nao atendem aos requisitos de portabilidade que uma codificacao de transporte binario para o correio deve atender. O processo de codificacao representa grupos de 24 bits de bits de entrada como cadeias de saida de 4 caracteres codificados. Procedendo da esquerda para a direita, um grupo de entrada de 24 bits e formado pela concatenacao de 3 grupos de entrada de 8 bits. Estes 24 bits sao entao tratados como 4 grupos de 6 bits concatenados, cada um dos quais e traduzido para um unico digito no alfabeto base64. Ao codificar um fluxo de bits atraves da codificacao base64, o fluxo de bits deve ser presumido para ser encomendado com o bit de maior significancia primeiro. Ou seja, o primeiro bit no fluxo sera o bit de alta ordem no primeiro byte eo oitavo bit sera o bit de baixa ordem no primeiro byte e assim por diante. Cada grupo de 6 bits e usado como um indice em uma matriz de 64 caracteres imprimiveis. O caractere referenciado pelo indice e colocado na string de saida. Esses caracteres, identificados na Tabela 1, abaixo, sao selecionados de modo a serem universalmente representaveis, e o conjunto exclui caracteres com particular significado para SMTP (por exemplo, CR, LF) e para os limites de encapsulamento definidos neste documento . Tabela 1: O alfabeto Base64 O fluxo de saida (bytes codificados) deve ser representado em linhas de nao mais de 76 caracteres cada. Todas as quebras de linha ou outros caracteres nao encontrados na Tabela 1 devem ser ignorados pelo software de decodificacao. Em dados base64, caracteres diferentes dos da Tabela 1, quebras de linha e outros espacos em branco provavelmente indicam um erro de transmissao, sobre o qual uma mensagem de aviso ou mesmo uma rejeicao de mensagem pode ser apropriada em algumas circunstancias. Processamento especial e executado se menos de 24 bits estiverem disponiveis no final dos dados que estao sendo codificados. Um quantum de codificacao completo e sempre completado no final de um corpo. Quando menos de 24 bits de entrada estao disponiveis em um grupo de entrada, sao adicionados bits zero (a direita) para formar um numero inteiro de grupos de 6 bits. As posicoes de caracteres de saida que nao sao necessarias para representar dados de entrada reais sao definidas para o caractere. Uma vez que toda a entrada de base64 e um numero inteiro de octetos, somente os seguintes casos podem surgir: (1) o quantum final de entrada de codificacao e um multiplo integral de 24 bits aqui, a unidade final de saida codificada sera um multiplo integral de 4 caracteres Sem enchimento, (2) o quantum final da entrada de codificacao e exatamente 8 bits aqui, a unidade final de saida codificada sera dois caracteres seguidos por dois caracteres de preenchimento, ou (3) o quantum final da entrada de codificacao e exatamente 16 bits aqui , A unidade final de saida codificada sera tres caracteres seguido por um caractere de preenchimento. Deve-se tomar cuidado para usar os octetos apropriados para quebras de linha se a codificacao base64 for aplicada diretamente ao material de texto que nao tenha sido convertido para a forma canonica. Em particular, as quebras de linha de texto devem ser convertidas em sequencias CRLF antes da codificacao base64. O importante e notar que isso pode ser feito diretamente pelo codificador em vez de em uma etapa anterior de canonizacao em algumas implementacoes. NOTA: Nao ha necessidade de se preocupar em cotar os limites aparentes de encapsulamento dentro de partes codificadas em base64 de entidades de varias partes, pois nenhum caractere de hifen e usado na codificacao base64. Codificacao de transferencia de conteudo: 8 bits adicionado incorretamente aos cabecalhos de e-mails de varias partes com imagens embutidas. Respondendo a uma mensagem HTML para a lista, a mensagem originalmente citada e processada como a versao de texto simples correta da mensagem, seguida por uma renderizacao de texto simples da fonte HTML da versao HTML da mensagem e uma codificacao base64 de texto simples De qualquer imagem inline. Esse comportamento documentado ate agora nas mensagens enviadas do Postbox 3.05 para Mac OS X, com a imagem inline sendo a imagem de perfil do remetente do catalogo de enderecos ea mensagem HTML sendo formatacao basica. Para ser confirmado se este for especifico para este programa de e-mail. Babbage 8 de setembro de 2012 as 9:40 am As mensagens HTML citadas sao renderizadas inline como versoes de texto simples de codigo As imagens inline sao renderizadas como versoes de texto simples do codigo Confirmado que este problema nao esta ocorrendo se eu desligar a preferencia Postbox , Incluir fotos de contatos para cada participante ao resumir, o que leva a uma parte do e-mail multipart HTML de imagejpeg: Portanto, este problema e provavelmente restrito a quando uma imagem inline e incluida em uma mensagem de grupo. Babbage Credit atribuicao: babbage comentou 8 de setembro de 2012 as 9:51 am Confirmado nao ha nenhum problema enviando uma mensagem para a lista com um arquivo jpg padrao como um anexo, em vez de inline. Confirmado uma imagem inline na mensagem original resulta em HTML e imagejpeg anexo que esta sendo processado como texto sem formatacao na mensagem enviada, portanto, este nao e restrito as respostas mensagem. Babbage Credit atribuicao: babbage comentou 8 de setembro de 2012 as 9:59 am Problema ocorre com a secao de ogmailinglisttransport. inc em c. Linha 908 (numero de linha pode ter alterado devido ao meu trabalho no arquivo), na secao que comeca: Esta e a secao de codigo que parece estar causando esse problema. Emails com imagens inline tem cabecalhos como: Content-Type: multipartmixed boundaryDrupal-OG-Mailinglist - 1143534839 charsetUTF-8 E-mails sem o problema nao tem boundaryDrupal-OG-Mailinglist - 1143534839 e em vez disso tem algo como: Content-Type: multipartmixed Boundally ------------ 050107000403000604050201 charsetUTF-8 Naturalmente, a natureza exata do limite e provavel que seja um pouco enviando cliente de e-mail especifico, mas que parece restringi-lo a um problema na criacao De uma nova entidade MIME como indicado acima. Babbage Credito Atribuicao: babbage comentou 8 de setembro de 2012 as 10:19 Hmm. Os e-mails com esse problema tem a seguinte estrutura de cabecalho: Ou seja, o cabecalho principal indica que o Content-Transfer-Encoding e 8bit (e UTF-8), mas entao cada subsecao declara que e 7bit (e ISO-8859-1, em O caso dessas mensagens). Estou pensando que a discrepancia 8bit7bit poderia ser um problema aqui babbage Credit atribuicao: babbage comentado 8 de setembro de 2012 as 9:10 Se um Content-Transfer-Encoding cabecalho campo aparece como parte de um cabecalho da mensagem, que se aplica a todo o corpo da mensagem . Se um campo de cabecalho Content-Transfer-Encoding aparece como parte de um cabecalho de partes do corpo, ele se aplica somente ao corpo dessa parte do corpo. Se uma entidade e de tipo multipart ou mensagem, a Content-Transfer-Encoding nao tem permissao para ter qualquer valor diferente de uma largura de bit (por exemplo, 7 bits, 8 bits, etc.) ou binario. Portanto, a presenca de uma especificacao 8bit explicita no cabecalho esta substituindo as especificacoes 7bit na mensagem multipart. Mesmo a ausencia de qualquer Content-Transfer-Encoding no cabecalho iria evitar este problema, tanto porque entao as especificacoes de parte do corpo seria aplicavel, mas tambem porque o mesmo documento especifica 7bit e o padrao se uma codificacao nao e especificada.