This document is for an old version of Python that is no longer supported. You should upgrade and read the documentação do Python para versão estável atual.

# 18.1.4. `email.mime`: Criando e-mail e objetos MIME fo zero

Normalmente, você obtém uma estrutura de objeto de mensagem passando um arquivo ou algum texto para um analisador, que analisa o texto e retorna o objeto de mensagem raiz. No entanto, você também pode criar uma estrutura de mensagem completa do zero, ou até objetos individuais de `Message` manualmente. De fato, você também pode pegar uma estrutura existente e adicionar novos objetos `Message`, movê-los, etc. Isso cria uma interface muito conveniente para fatiar e cortar dados de mensagens MIME.

Você pode criar uma nova estrutura de objeto criando instâncias de `Message`, adicionando anexos e todos os cabeçalhos apropriados manualmente. Porém, para mensagens MIME, o pacote `email` fornece algumas subclasses convenientes para facilitar as coisas.

Arquivo estão as classes:

class `email.mime.base.``MIMEBase`(_maintype, _subtype, **_params)

  Módulo: `email.mime.base`

  Esta é a classe base para todas as subclasses específicas de MIME de `Message`. Normalmente você não criará instâncias especificamente de `MIMEBase`, embora possa. A `MIMEBase` é fornecida principalmente como uma classe base conveniente para subclasses mais específicas para MIME.

  _maintype é o tipo principal de Content-Type (ex., text ou image) e _subtype é o tipo principal de Content-Type (ex., plain ou gif). _params é um dicionário de parâmetros chave/valor e é passado diretamente para `Message.add_header`.

  A classe `MIMEBase` sempre adiciona um cabeçalho Content-Type (com base em _maintype, _subtype e _params) e um cabeçalho MIME-Version (sempre definido como `1.0`).

class `email.mime.nonmultipart.``MIMENonMultipart`

  Módulo: `email.mime.nonmultipart`

  Uma subclasse de `MIMEBase`, esta é uma classe base intermediária para mensagens MIME que não são multipart. O principal objetivo desta classe é impedir o uso do método `attach()`, que só faz sentido para mensagens multipart. Se `attach()` for chamado, uma exceção `MultipartConversionError` será levantada.

  Novo na versão 2.2.2.

class `email.mime.multipart.``MIMEMultipart`([_subtype[, boundary[, _subparts[, _params]]]])

  Módulo: `email.mime.multipart`

  Uma subclasse de `MIMEBase`, esta é uma classe base intermediária para mensagens MIME que são multipart. O _subtype opcional é padronizado como mixed, mas pode ser usado para especificar o subtipo da mensagem. Um cabeçalho Content-Type de multipart/_subtype será adicionado ao objeto da mensagem. Um cabeçalho MIME-Version também será adicionado.

  O boundary opcional é a string de limites de várias partes. Quando `None` (o padrão), o limite é calculado quando necessário (por exemplo, quando a mensagem é serializada).

  _subparts é uma sequência de subpartes iniciais para a carga. Deve ser possível converter essa sequência em uma lista. Você sempre pode anexar novas subpartes à mensagem usando o método `Message.attach`.

  Additional parameters for the Content-Type header are taken from the keyword arguments, or passed into the _params argument, which is a keyword dictionary.

  Novo na versão 2.2.2.

class `email.mime.application.``MIMEApplication`(_data[, _subtype[, _encoder[, **_params]]])

  Módulo: `email.mime.application`

  Uma subclasse de `MIMENonMultipart`, a classe `MIMEApplication` é usada para representar objetos de mensagem MIME do tipo principal application. _data * é uma sequência que contém os dados brutos de bytes. O *_subtype opcional especifica o subtipo MIME e o padrão é octet-stream.

  O _encoder opcional é um chamável (isto é, função) que executará a codificação real dos dados para transporte. Esse chamável requer um argumento, que é a instância `MIMEApplication`. Ele deve usar `get_payload()` e `set_payload()` para alterar a carga útil para o formulário codificado. Também deve adicionar Content-Transfer-Encoding ou outros cabeçalhos ao objeto de mensagem, conforme necessário. A codificação padrão é base64. Veja o módulo `email.encoders` para obter uma lista dos codificadores embutidos.

  _params são passados diretamente para o construtor da classe base.

  Novo na versão 2.5.

class `email.mime.audio.``MIMEAudio`(_audiodata[, _subtype[, _encoder[, **_params]]])

  Módulo: `email.mime.audio`

  A subclass of `MIMENonMultipart`, the `MIMEAudio` class is used to create MIME message objects of major type audio. _audiodata is a string containing the raw audio data. If this data can be decoded by the standard Python module `sndhdr`, then the subtype will be automatically included in the Content-Type header. Otherwise you can explicitly specify the audio subtype via the _subtype parameter. If the minor type could not be guessed and _subtype was not given, then `TypeError` is raised.

  O _encoder opcional é um chamável (ou seja, função) que executará a codificação real dos dados de áudio para transporte. Esse chamável requer um argumento, que é a instância `MIMEAudio`. Ele deve usar `get_payload()` e `set_payload()` para alterar a carga útil para a forma codificada. Também deve adicionar Content-Transfer-Encoding ou outros cabeçalhos ao objeto de mensagem, conforme necessário. A codificação padrão é base64. Veja o módulo `email.encoders` para obter uma lista dos codificadores embutidos.

  _params são passados diretamente para o construtor da classe base.

class `email.mime.image.``MIMEImage`(_imagedata[, _subtype[, _encoder[, **_params]]])

  Módulo: `email.mime.image`

  A subclass of `MIMENonMultipart`, the `MIMEImage` class is used to create MIME message objects of major type image. _imagedata is a string containing the raw image data. If this data can be decoded by the standard Python module `imghdr`, then the subtype will be automatically included in the Content-Type header. Otherwise you can explicitly specify the image subtype via the _subtype parameter. If the minor type could not be guessed and _subtype was not given, then `TypeError` is raised.

  Optional _encoder is a callable (i.e. function) which will perform the actual encoding of the image data for transport. This callable takes one argument, which is the `MIMEImage` instance. It should use `get_payload()` and `set_payload()` to change the payload to encoded form. It should also add any Content-Transfer-Encoding or other headers to the message object as necessary. The default encoding is base64. See the `email.encoders` module for a list of the built-in encoders.

  _params are passed straight through to the `MIMEBase` constructor.

class `email.mime.message.``MIMEMessage`(_msg[, _subtype])

  Module: `email.mime.message`

  A subclass of `MIMENonMultipart`, the `MIMEMessage` class is used to create MIME objects of main type message. _msg is used as the payload, and must be an instance of class `Message` (or a subclass thereof), otherwise a `TypeError` is raised.

  Optional _subtype sets the subtype of the message; it defaults to rfc822.

class `email.mime.text.``MIMEText`(_text[, _subtype[, _charset]])

  Module: `email.mime.text`

  A subclass of `MIMENonMultipart`, the `MIMEText` class is used to create MIME objects of major type text. _text is the string for the payload. _subtype is the minor type and defaults to plain. _charset is the character set of the text and is passed as a parameter to the `MIMENonMultipart` constructor; it defaults to `us-ascii`. If _text is unicode, it is encoded using the output_charset of _charset, otherwise it is used as-is.

  Alterado na versão 2.4: The previously deprecated _encoding argument has been removed. Content Transfer Encoding now happens implicitly based on the _charset argument.

  Unless the `_charset` parameter is explicitly set to `None`, the MIMEText object created will have both a Content-Type header with a `charset` parameter, and a Content-Transfer-Encoding header. This means that a subsequent `set_payload` call will not result in an encoded payload, even if a charset is passed in the `set_payload` command. You can “reset” this behavior by deleting the `Content-Transfer-Encoding` header, after which a `set_payload` call will automatically encode the new payload (and add a new Content-Transfer-Encoding header).