# MIME

Extensões Multi função para Mensagens de Internet (sigla MIME do inglês Multipurpose Internet Mail Extensions) é uma norma da internet para o formato das mensagens de correio eletrônico. A grande maioria das mensagens de correio eletrônico são trocadas usando o protocolo SMTP e usam o formato MIME. As mensagens na Internet tem uma associação tão estreita aos padrões SMTP e MIME que algumas vezes são chamadas de mensagens SMTP/MIME.
O protocolo básico de transmissão de e-mail pela Internet, SMTP, suporta apenas 7-bit de caracteres ASCII. Isto limita as mensagens de emails, incluindo somente os caracteres usados na língua inglesa.
O MIME provê mecanismos para o envio de outros tipos de informações por e-mail, incluindo caracteres não utilizados no idioma inglês, usando codificações diferentes do ASCII, assim como formatos binários contendo imagens, sons, filmes, e programas de computador. MIME é também um componente fundamental de comunicação de protocolos como o HTTP, que requer que os dados sejam transmitidos em contextos semelhantes a mensagens de email, mesmo que o dado a ser transmitido não seja realmente um e-mail.
O mapeamento de mensagens dentro e fora do formato MIME é tipicamente utilizado pelos clientes de email ou pelos servidores de email quando enviam ou recebem emails via SMTP/MIME.
O formato básico de e-mail é definido pela RFC 2822, que atualiza a versão RFC 822.
Estes padrões especificam os formatos familiares para o cabeçalho dos e-mails e o corpo e as regras que pertencem aos campos geralmente usados do cabeçalho como "Para:", "Assunto:", "De:" e "Data:".
O MIME define uma coleção de cabeçalhos do e-mail para especificar atributos adicionais de uma mensagem incluindo o tipo de caractere do texto e dos arquivos (ficheiros) de transferência que podem ser usados para representar dados binários 8-bit usando caracteres de 7-bit ASCII. O MIME é extensivo, as suas definições incluem métodos para registrar novos conteúdos e valores.
Os objetivos da definição do MIME não eram mudanças aos usuários de e-mail. Este objetivo é conseguido permitindo que todos os atributos da mensagem do MIME sejam opcionais, com os valores padrões que fazem uma mensagem não-MIME, provavelmente, capaz de ser interpretada corretamente por um cliente MIME.

## Cabeçalhos MIME
### Versão MIME

A presença deste cabeçalho indica que a mensagem tem o formato MIME. Tipicamente, o valor é "1.0"; portanto, este cabeçalho aparece como

### Tipos de conteúdos

Tipos de conteúdo são identificados no cabeçalho da mensagem ("header") como Content-Type, que indica o type (tipo) e subtype (subtipo) do conteúdo da mensagem, p. ex.:
A combinação de tipo e subtipo é geralmente chamada MIME type, embora nas aplicações mais modernas o Internet media type seja o termo favorito, indicando a sua aplicação fora das mensagens MIME. Um grande número de formatos de ficheiro registrou o MIME type. Qualquer tipo de texto tem um parâmetro charset que pode ser incluído para indicar a codificação de caracter. Uma grande quantidade de tipos de letra registraram nomes de charset MIME.
Embora originalmente definido por MIME e-mail, o cabeçalho conteúdo-tipo e o tipo MIME de registro é reutilizado em outros protocolos de Internet, como HTTP. O tipo de registro MIME é administrado por IANA.
Através do uso do tipo multipart, MIME permite mensagens com vários tipos de construções em árvore, onde os nós da folha são qualquer tipo de mensagem multipart e os nós não-folha são alguma variante do tipo multipart. Veja alguns mecanismos suportados:
* Textos simples usando text/plain (este é o valor padrão para o "Content-type:")
* Texto com arquivos (ficheiros) anexos (multipart/mixed com uma parte text/plain e outra não-textual). Uma mensagem MIME incluindo um arquivo anexo geralmente é indicada o nome original do anexo no "Content-disposition:" dentro do cabeçalho.
* Respostas com anexos originais (multipart/mixed com uma parte text/plain e a mensagem original como um MIME message/rfc822)
* Conteúdo alternativo, é usado quando uma mensagem é enviada em texto simples e, por exemplo, um cliente de email a transforma em HTML para o destino, o MIME será (multipart/alternative com o mesmo conteúdo do texto simples em text/plain mas o MIME transformado em text/html)
* Muitas outras construções de mensagens.

### Codificação de conteúdo de transferência

Codificação de conteúdo de transferência são identificados como Content-Transfer-Encoding. MIME (RFC 2045) define uma gama de métodos para a representação de dados binários em formato texto ASCII. O content-transfer-encoding: no header indica o método a ser utilizado. A RFC e a lista da IANA são quem define os tipos de codificações de transferência:
* Uso apropriado com SMTP normal:
** 7bit - acima de 998 octetos por linha na variação de [1..127] com CR e LF (códigos 10 e 13) reservado somente para aparecer como a parte de uma linha final de CRLF. Este é o valor padrão.
** quoted-printable - usado para textos simples com caracteres US-ASCII.
** base64 - usado para dados binários arbitrários.
* Uso apropriado com servidores SMTP que suportam transporte 8BITMIME:
** 8bit - acima de 998 octetos por linha CR e LF (códigos de 10 e 13) reservado somente para aparecer como a parte de uma linha final de CRLF.
* Não apropriado para uso com SMTP:
** binário - seqüência de octetos. Não usado com e-mails SMTP.
Não há nenhuma codificação definida que é projetada explicitamente para dados binários arbitrários com transporte 8BITMIME, assim a base64 ou quoted-printable são às vezes ainda utilizados.

## Palavra codificada

Desde a RFC 2822, os nomes e valores dos headers das mensagens são sempre caracteres ASCII. Valores que contenham caracteres não-ASCII são denominados encoded-word pelo MIME, ficando com a sintaxe da RFC 2047 em vez da frase literal. Esta sintaxe usa a string de caracteres ASCII para indicar o tipo de codificação de caracter original, ou seja, o "charset" e o "content-transfer-encoding" usado para o mapa de bytes do charset dentro dos caracteres ASCII.
A forma é: "=?charset?encoding?encoded text?=".
* O charset é frequentemente utf-8, mas pode ser qualquer caracter registrado com a IANA. iso-2022-jp é comum no Japão. iso-8859-1 e mais recentemente iso-8859-15 são comuns no leste europeu.
* encoding pode ser um "Q" denotando a codificação da quoted-printable ou "B" que denota a codificação base64.
* encoded text (codificação do texto) é o texto da "quoted-printable" ou de "base64-encoded".
Por exemplo,
Subject: =?utf-8?Q?=C2=A1Hola,=20se=C3=B1or!?=
é interpretado como "Subject: ¡Hola, señor!".
O formato da palavra codificada ("encoded-word") não é usado nos nomes do cabeçalho, somente no Subject: (Título). Todo o texto do cabeçalho é sempre escrito em Inglês . Quando a mensagem não está em inglês, o cabeçalho é traduzido pelo cliente de e-mail.

## Exemplo de Multipart

Um MIME com mensagem multipart contém um "boundary" (literalmente, um "limite") no "Content-type:" do header; este boundary, é colocado entre as partes, no começo e no fim do corpo da mensagem, como segue:
    Content-type: multipart/mixed; boundary="frontier" MIME-version: 1.0 --frontier Content-type: text/plain Este é o corpo da mensagem. --frontier Content-type: application/octet-stream Content-transfer-encoding: base64 gajwO4+n2Fy4FV3V7zD9awd7uG8/TITP/vIocxXnnf/5mjgQjcipBUL1b3uyLwAVtBLOP4nV LdIAhSzlZnyLAF8na0n7g6OSeej7aqIl3NIXCfxDsPsY6NQjSvV77j4hWEjlF/aglS6ghfju FgRr+OX8QZMI1OmR4rUJUS7xgoknalqj3HJvaOpeb3CFlNI9VGZYz6H6zuQBOWZzNB8glwpC --frontier--