2. MIME

MIME (em português: Extensões Multi-função para Mensagens de Internet) é um protocolo que foi definido com o objetivo de permitir a inclusão de dados não-ASCII via e-mail. Isto porque, o protocolo SMTP – usado para transferência de e-mails – trabalha apenas com caracteres NTV ASCII, formado por 8 bits: o bit mais significativo em zero, seguido por 7 bits ASCII. O MIME atua convertendo os dados não-ASCII inseridos pelo usuário, para dados ASCII, de forma que possam ser transmitidos pelo SMTP. No receptor é feito o processo inverso, como ilustrado na figura 1.


Figura 1. Esquema de funcionamento MIME

O MIME é, portanto, um protocolo completar ao SMTP, não sendo responsável pela transmissão dos dados. Além disso, seu uso não está restrito com SMTP, podendo ser utilizado com qualquer protocolo de envio de e-mails, como o POP3.

Cabeçalho MIME

O MIME, define cinco itens de cabeçalho que podem ser adicionados ao cabeçalho SMTP original:

  • MIME Version
  • Content Type
  • Content Transfer Encoding
  • Content Id
  • Content Description

MIME Version
Define a versão do MIME utilizada.

Contente Type
Define o tipo dos dados contidos no corpo da mensagem. É possível definir um tipo e um subtipo, separados por barra. Existem sete diferentes tipos de dados:

  1. Text: Mensagem no formato 7-bit ASCII.
  2. Multipart: O corpo da mensagem possui partes múltiplas e independentes. Neste caso, o cabeçalho deve definir a fronteira entre cada parte. Cada parte possuirá, separadamente, um Content Type e Encoding. O tipo Multipart permite dois subtipos: signed e encrypted.

O Content Type: multipart/signed é o que permite suporte a serviços de autenticação e verificação de integridade da mensagem, através do de assinatura digital. Quando um cabeçalho é do tipo multipart/signed, é necessário especificar mais três parâmetros:
- boundary: fronteira entre cada parte.
- protocol: protocolo de segurança utilizado.
- micalg: algoritmo MIC usado. MIC (em português: Checagem de Integridade da Mensagem) é o valor computado quando se aplica uma função hash sobre o corpo da mensagem.
O Content Type: multipart/encrypted é o que permite suporte a serviços de encriptação. Quando um cabeçalho é do tipo multipart/encrypted, é necessário especificar os dois parâmetros boundary e protocol.
Um conteúdo do tipo multipart conterá sempre um corpo da mensagem dividido em duas partes: uma parte sobre a qual se aplica o algoritmo de assinatura/encriptação e outra parte contendo as informações de controle necessárias para decriptação.
É importante notar que o MIME, por si só, não provê segurança. Para tanto, é necessário empregar um protocolo de segurança que se capaz de realizar os serviços de assinatura ou encriptação. Isso será mais explicado quando tratarmos especificamente de segurança, no Item 3 (S/MIME).

  1. Message: pode indicar que o corpo da mensagem é o e-mail inteiro (subtipe = RFC 2822), uma parte do e-mail(subtipe = partial) ou um ponteiro para a mensagem (subtipe = external body).

O subtipo partial é usado quando a mensagem foi fragmentada em diversos e-mails, e esse e-mail é um dos fragmentos. Os fragmentos deverão ser devidamente juntado pelo agente MIME no destino. Neste caso, três parâmetros são necessários: um ID da mensagem, presente em todos os seus fragmentos; o number, número de seqüência deste fragmento; e o total, que define o número total de fragmentos que a mensagem original foi dividida.

  1. Image: a mensagem é uma imagem. Os subtipos mais comuns são JPEG e GIF.
  2. Vídeo: a mensagem é um vídeo (imagem variante com o tempo). O subtipo mais comum é o MPEG. Se o vídeo contiver som, este deve ser mandado separadamente, num Content Type: audio.
  3. Audio: a mensagem é um áudio. O único subtipo é basic, que utiliza para os dados de áudio uma freqüência padrão de 8kHz.
  4. Application: a mensagem é de um tipo não previamente definido.

 

Content_Transfer_Encoding
Define o tipo de codificação utilizado. São cinco:

  • 7-bit: caracteres NTV ASCII e linhas curtas.
  • 8-bit: caracteres não-ASCII e linhas curtas.
  • Binary: caracteres não ASCII e linhas de tamanho ilimitado.
  • Base64: bloco de 6 bits de dados codificados em 8 bits de caracteres ASCII. Esta a codificação é usada, por exemplo, para transferência de imagens e vídeos.
  • Quoted-printable: caracteres não-ASCII codificados como um sinal de igual seguido de um código ASCII.

Content_Id
Define um ID único.

Content_Description
Fornece uma explicação por escrito do conteúdo não-textual.