{"title":"Enviando e-mail","version":"3.0","locale":"pt-br","docname":"topics/email","url":"/pt-br/3.0/topics/email/","canonical":"https://djangodocs.dev/pt-br/3.0/topics/email/","summary":"Although Python provides a mail sending interface via the smtplib module, Django provides a couple of light wrappers over it.","html":"<span id=\"sending-email\"></span><h1>Enviando e-mail<a class=\"heading-anchor\" href=\"#module-django.core.mail\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Although Python provides a mail sending interface via the <a class=\"reference external\" href=\"https://docs.python.org/3/library/smtplib.html#module-smtplib\" title=\"(em Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">smtplib</code></a>\nmodule, Django provides a couple of light wrappers over it. These wrappers are\nprovided to make sending email extra quick, to help test email sending during\ndevelopment, and to provide support for platforms that can’t use SMTP.</p>\n<p>O código pode ser encontrado no módulo <code class=\"docutils literal notranslate\">django.core.mail</code>.</p>\n<section id=\"quick-example\">\n<h2>Exemplo rápido<a class=\"heading-anchor\" href=\"#quick-example\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Em duas linhas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"kn\">import</span> send_mail\n\nsend_mail<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;Subject here&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;Here is the message.&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">[</span><span class=\"s1\">&#39;to@example.com&#39;</span><span class=\"p\">],</span>\n    fail_silently<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>O email é enviado usando o host e porta SMTP especificados em <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST</code></a> e <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_PORT\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_PORT</code></a>. As configurações <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST_USER\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_USER</code></a> e <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST_PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_PASSWORD</code></a>, se definidas, são usadas para autenticar no servidor SMTP, e as configurações <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_USE_TLS\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_USE_TLS</code></a> e <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_USE_SSL\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_USE_SSL</code></a> controlam se uma conexão segura deve ou não ser usada.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>O conjunto de caracteres do email enviado com <code class=\"docutils literal notranslate\">django.core.mail</code> será definido como sendo o valor da configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-DEFAULT_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_CHARSET</code></a>.</p>\n</aside>\n</section>\n<section id=\"send-mail\">\n<h2><code class=\"docutils literal notranslate\">send_mail()</code><a class=\"heading-anchor\" href=\"#send-mail\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.send_mail\">\n<span class=\"sig-name descname\">send_mail</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">subject</em>, <em class=\"sig-param\">message</em>, <em class=\"sig-param\">from_email</em>, <em class=\"sig-param\">recipient_list</em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">auth_user<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">auth_password<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">connection<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">html_message<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.mail.send_mail\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>In most cases, you can send email using <code class=\"docutils literal notranslate\">django.core.mail.send_mail()</code>.</p>\n<p>Os parâmetros <code class=\"docutils literal notranslate\">subject</code>, <code class=\"docutils literal notranslate\">message</code>, <code class=\"docutils literal notranslate\">from_email</code> e <code class=\"docutils literal notranslate\">recipient_list</code> devem ser informados.</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">subject</code>: uma string.</p></li>\n<li><p><code class=\"docutils literal notranslate\">message</code>: uma string.</p></li>\n<li><p><code class=\"docutils literal notranslate\">from_email</code>: uma string.</p></li>\n<li><p><code class=\"docutils literal notranslate\">recipient_list</code>: uma lista de strings, onde cada item representa um endereço de email. Cada membro de <code class=\"docutils literal notranslate\">recipient_list</code> verá os outros recipientes no campo “To:” da mensagem de email.</p></li>\n<li><p><code class=\"docutils literal notranslate\">fail_silently</code>: A boolean. When it’s <code class=\"docutils literal notranslate\">False</code>, <code class=\"docutils literal notranslate\">send_mail()</code> will raise\nan <a class=\"reference external\" href=\"https://docs.python.org/3/library/smtplib.html#smtplib.SMTPException\" title=\"(em Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">smtplib.SMTPException</code></a> if an error occurs. See the <a class=\"reference external\" href=\"https://docs.python.org/3/library/smtplib.html#module-smtplib\" title=\"(em Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">smtplib</code></a>\ndocs for a list of possible exceptions, all of which are subclasses of\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/smtplib.html#smtplib.SMTPException\" title=\"(em Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\">SMTPException</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">auth_user</code>: O username opcional para ser usado na autenticação do servidor SMTP. Se isso não for fornecido, o Django irá usar o valor da configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST_USER\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_USER</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">auth_password</code>: A senha opcional para ser usada na autenticação no servidor SMTP. Se isso não for fornecido, o Django irá usar o valor da configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST_PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_PASSWORD</code></a>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">connection</code>: O backend opcional a ser usado para o de email. Se indefinido, uma instância do backend default será usada. Veja a documentação em <a class=\"reference internal\" href=\"#topic-email-backends\"><span class=\"std std-ref\">Email backends</span></a> para mais detalhes.</p></li>\n<li><p><code class=\"docutils literal notranslate\">html_message</code>: Se <code class=\"docutils literal notranslate\">html_message</code> for fornecido, o email resultante será um <em class=\"mimetype\">multipart/alternative</em> email com <code class=\"docutils literal notranslate\">message</code> sendo do tipo <em class=\"mimetype\">text/plain</em> e <code class=\"docutils literal notranslate\">html_message</code> sendo do tipo <em class=\"mimetype\">text/html</em>.</p></li>\n</ul>\n<p>O valor retornado será o número de mensagens entregues com sucesso (o que pode ser <code class=\"docutils literal notranslate\">0</code> ou <code class=\"docutils literal notranslate\">1</code> já que ele só pode enviar uma mensagem).</p>\n</section>\n<section id=\"send-mass-mail\">\n<h2><code class=\"docutils literal notranslate\">send_mass_mail()</code><a class=\"heading-anchor\" href=\"#send-mass-mail\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.send_mass_mail\">\n<span class=\"sig-name descname\">send_mass_mail</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">datatuple</em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">auth_user<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">auth_password<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">connection<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.mail.send_mass_mail\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.core.mail.send_mass_mail()</code> foi pensado para manipular envios massivos de email.</p>\n<p><code class=\"docutils literal notranslate\">datatuple</code> é uma tupla na qual cada elemento possui o seguinte formato:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">(</span>subject<span class=\"p\">,</span> message<span class=\"p\">,</span> from_email<span class=\"p\">,</span> recipient_list<span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">fail_silently</code>, <code class=\"docutils literal notranslate\">auth_user</code> e <code class=\"docutils literal notranslate\">auth_password</code> possuem as mesmas funções do método <a class=\"reference internal\" href=\"#django.core.mail.send_mail\" title=\"django.core.mail.send_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mail()</code></a>.</p>\n<p>Cada elemento separadamente da <code class=\"docutils literal notranslate\">datatuple</code> resulta em uma mensagem em separado. Como no método <a class=\"reference internal\" href=\"#django.core.mail.send_mail\" title=\"django.core.mail.send_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mail()</code></a>, destinatários na mesma lista <code class=\"docutils literal notranslate\">recipient_list</code> serão capazes de visualizar os outros endereços no campo “To:” das mensagens de email.</p>\n<p>Por exemplo, o código abaixo enviaria duas mensagens diferentes para dois conjuntos diferentes de destinatários; porém, somente uma conexão para o servidor de email seria aberta:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>message1 <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Subject here&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Here is the message&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;first@example.com&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;other@example.com&#39;</span><span class=\"p\">])</span>\nmessage2 <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Another Subject&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Here is another message&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;second@test.com&#39;</span><span class=\"p\">])</span>\nsend_mass_mail<span class=\"p\">((</span>message1<span class=\"p\">,</span> message2<span class=\"p\">),</span> fail_silently<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>O valor de retorno será o número de mensagens entregues com sucesso.</p>\n<section id=\"send-mass-mail-vs-send-mail\">\n<h3><code class=\"docutils literal notranslate\">send_mass_mail()</code> vs. <code class=\"docutils literal notranslate\">send_mail()</code><a class=\"heading-anchor\" href=\"#send-mass-mail-vs-send-mail\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A principal diferença entre os métodos <a class=\"reference internal\" href=\"#django.core.mail.send_mass_mail\" title=\"django.core.mail.send_mass_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mass_mail()</code></a> e <a class=\"reference internal\" href=\"#django.core.mail.send_mail\" title=\"django.core.mail.send_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mail()</code></a> é que o método <a class=\"reference internal\" href=\"#django.core.mail.send_mail\" title=\"django.core.mail.send_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mail()</code></a> abre uma nova conexão para o servidor de email toda vez que é executado, enquanto que o método <a class=\"reference internal\" href=\"#django.core.mail.send_mass_mail\" title=\"django.core.mail.send_mass_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mass_mail()</code></a> utiliza uma única conexão para todas as suas mensagens. Isso faz com que o método <a class=\"reference internal\" href=\"#django.core.mail.send_mass_mail\" title=\"django.core.mail.send_mass_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mass_mail()</code></a> seja um pouco mais eficiente.</p>\n</section>\n</section>\n<section id=\"mail-admins\">\n<h2><code class=\"docutils literal notranslate\">mail_admins()</code><a class=\"heading-anchor\" href=\"#mail-admins\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.mail_admins\">\n<span class=\"sig-name descname\">mail_admins</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">subject</em>, <em class=\"sig-param\">message</em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">connection<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">html_message<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.mail.mail_admins\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.core.mail.mail_admins()</code> é um atalho para o envio de email para os admins do site, conforme definido na configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\">ADMINS</code></a> setting.</p>\n<p><code class=\"docutils literal notranslate\">mail_admins()</code> prefixa o conteúdo com o valor da configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_SUBJECT_PREFIX\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_SUBJECT_PREFIX</code></a>, que é <code class=\"docutils literal notranslate\">&quot;[Django] &quot;</code> por padrão.</p>\n<p>O cabeçalho “From:” do email será o valor da configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-SERVER_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">SERVER_EMAIL</code></a>.</p>\n<p>Esse método existe por conveniência e legibilidade.</p>\n<p>Se <code class=\"docutils literal notranslate\">html_message</code> é fornecido, o email resultante será um email do tipo <em class=\"mimetype\">multipart/alternative</em> com <code class=\"docutils literal notranslate\">message</code> sendo do tipo <em class=\"mimetype\">text/plain</em> e <code class=\"docutils literal notranslate\">html_message</code> sendo do tipo <em class=\"mimetype\">text/html</em>.</p>\n</section>\n<section id=\"mail-managers\">\n<h2><code class=\"docutils literal notranslate\">mail_managers()</code><a class=\"heading-anchor\" href=\"#mail-managers\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.mail_managers\">\n<span class=\"sig-name descname\">mail_managers</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">subject</em>, <em class=\"sig-param\">message</em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">connection<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">html_message<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.mail.mail_managers\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\">django.core.mail.mail_managers()</code> é parecido com <code class=\"docutils literal notranslate\">mail_admins()</code>, exceto pelo fato de que ele envia um email para os mantenedores do site, conforme definido na configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\">MANAGERS</code></a>.</p>\n</section>\n<section id=\"examples\">\n<h2>Exemplos<a class=\"heading-anchor\" href=\"#examples\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Isso envia um único email para <a class=\"reference external\" href=\"mailto:john&#37;&#52;&#48;example&#46;com\">john<span>&#64;</span>example<span>&#46;</span>com</a> e <a class=\"reference external\" href=\"mailto:jane&#37;&#52;&#48;example&#46;com\">jane<span>&#64;</span>example<span>&#46;</span>com</a>, com ambos aparecendo no campo “To:”:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>send_mail<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;Subject&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;Message.&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">[</span><span class=\"s1\">&#39;john@example.com&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;jane@example.com&#39;</span><span class=\"p\">],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>Isso envia uma mensagem para <a class=\"reference external\" href=\"mailto:john&#37;&#52;&#48;example&#46;com\">john<span>&#64;</span>example<span>&#46;</span>com</a> e <a class=\"reference external\" href=\"mailto:jane&#37;&#52;&#48;example&#46;com\">jane<span>&#64;</span>example<span>&#46;</span>com</a>, com ambos recebendo um email em separado:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>datatuple <span class=\"o\">=</span> <span class=\"p\">(</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;Subject&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Message.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;john@example.com&#39;</span><span class=\"p\">]),</span>\n    <span class=\"p\">(</span><span class=\"s1\">&#39;Subject&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Message.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;jane@example.com&#39;</span><span class=\"p\">]),</span>\n<span class=\"p\">)</span>\nsend_mass_mail<span class=\"p\">(</span>datatuple<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"preventing-header-injection\">\n<h2>Prevenindo injeção de cabeçalhos<a class=\"heading-anchor\" href=\"#preventing-header-injection\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference external\" href=\"http://www.nyphp.org/phundamentals/8_Preventing-Email-Header-Injection\">injeção de cabeçalhos</a> é uma vulnerabilidade de segurança onde um atacante insere cabeçalhos extras no email para controlar os campos “To:” e “From:” em mensagens de email geradas pelos seus scripts.</p>\n<p>As funções de email do Django descritas acima protegem contra injeção de cabeçalhos proibindo novas linhas nos valores do cabeçalho. Se qualquer campo <code class=\"docutils literal notranslate\">subject</code>, <code class=\"docutils literal notranslate\">from_email</code> ou <code class=\"docutils literal notranslate\">recipient_list</code> contém uma nova linha (seja no estilo Unix, Windows ou Mac), a função de email (por exemplo, o método <code class=\"xref py py-meth docutils literal notranslate\">BadHeaderError`()</code> (uma subclasse de <code class=\"docutils literal notranslate\">ValueError</code>) e, por tanto, não envia o email. É sua responsabilidade validar todos os dados do email antes de passá-los para as funções de email.</p>\n<p>If a <code class=\"docutils literal notranslate\">message</code> contains headers at the start of the string, the headers will\nbe printed as the first bit of the email message.</p>\n<p>Segue uma view de exemplo que recebe <code class=\"docutils literal notranslate\">subject</code>, <code class=\"docutils literal notranslate\">message</code> e <code class=\"docutils literal notranslate\">from_email</code> de uma requisição POST, envia esses dados para <a class=\"reference external\" href=\"mailto:admin&#37;&#52;&#48;example&#46;com\">admin<span>&#64;</span>example<span>&#46;</span>com</a> e redireciona para “/contact/thanks/” no final:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"kn\">import</span> BadHeaderError<span class=\"p\">,</span> send_mail\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse<span class=\"p\">,</span> HttpResponseRedirect\n\n<span class=\"k\">def</span> <span class=\"nf\">send_email</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    subject <span class=\"o\">=</span> request<span class=\"o\">.</span>POST<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s1\">&#39;subject&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    message <span class=\"o\">=</span> request<span class=\"o\">.</span>POST<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s1\">&#39;message&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    from_email <span class=\"o\">=</span> request<span class=\"o\">.</span>POST<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s1\">&#39;from_email&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> subject <span class=\"ow\">and</span> message <span class=\"ow\">and</span> from_email<span class=\"p\">:</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            send_mail<span class=\"p\">(</span>subject<span class=\"p\">,</span> message<span class=\"p\">,</span> from_email<span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;admin@example.com&#39;</span><span class=\"p\">])</span>\n        <span class=\"k\">except</span> BadHeaderError<span class=\"p\">:</span>\n            <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s1\">&#39;Invalid header found.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> HttpResponseRedirect<span class=\"p\">(</span><span class=\"s1\">&#39;/contact/thanks/&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># In reality we&#39;d use a form class</span>\n        <span class=\"c1\"># to get proper validation errors.</span>\n        <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s1\">&#39;Make sure all fields are entered and valid.&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"the-emailmessage-class\">\n<span id=\"emailmessage-and-smtpconnection\"></span><h2>A classe <code class=\"docutils literal notranslate\">EmailMessage</code><a class=\"heading-anchor\" href=\"#the-emailmessage-class\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>As funções do Django <a class=\"reference internal\" href=\"#django.core.mail.send_mail\" title=\"django.core.mail.send_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mail()</code></a> e <a class=\"reference internal\" href=\"#django.core.mail.send_mass_mail\" title=\"django.core.mail.send_mass_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mass_mail()</code></a> são na verdade pequenos wrappers que fazem uso da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a>.</p>\n<p>Nem todas as funcionalidades da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> estão disponíveis através das funções <a class=\"reference internal\" href=\"#django.core.mail.send_mail\" title=\"django.core.mail.send_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mail()</code></a> e funções wrapper relacionadas. Se você quiser usar recursos avançados, tais como destinatários BCC’ed, anexar de arquivos, ou email de múltiplas partes, você terá que criar instâncias da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> diretamente.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>Esse é um recurso de design. A função <a class=\"reference internal\" href=\"#django.core.mail.send_mail\" title=\"django.core.mail.send_mail\"><code class=\"xref py py-meth docutils literal notranslate\">send_mail()</code></a> e funções relacionadas foram originalmente a única interface que o Django fornecia. Porém, a lista de parâmetros que elas aceitavam foi aos poucos crescendo com o passar do tempo. Fez sentido mudar para um design mais orientado a objetos para mensagens de email e manter as funções originais apenas para manter compatibilidade com versões anteriores.</p>\n</aside>\n<p>A classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> é responsável por criar a mensagem de email em si. O <a class=\"reference internal\" href=\"#topic-email-backends\"><span class=\"std std-ref\">email backend</span></a> é depois responsável pelo envio da mensagem.</p>\n<p>For convenience, <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> provides a <code class=\"docutils literal notranslate\">send()</code>\nmethod for sending a single email. If you need to send multiple messages, the\nemail backend API <a class=\"reference internal\" href=\"#topics-sending-multiple-emails\"><span class=\"std std-ref\">provides an alternative</span></a>.</p>\n<section id=\"emailmessage-objects\">\n<h3>Objetos <code class=\"docutils literal notranslate\">EmailMessage</code><a class=\"heading-anchor\" href=\"#emailmessage-objects\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.EmailMessage\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">EmailMessage</span><a class=\"heading-anchor\" href=\"#django.core.mail.EmailMessage\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>A classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> é inicializada com os seguintes parâmetros (na seguinte ordem, se argumentos posicionais são usados). Todos os parâmetros são opcionais e podem ser informados a qualquer momento anterior a chamada do método <code class=\"docutils literal notranslate\">send()</code>.</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">subject</code>: A linha de assunto do email.</p></li>\n<li><p><code class=\"docutils literal notranslate\">body</code>: O corpo do texto. Deve ser uma mensagem em texto simples.</p></li>\n<li><p><code class=\"docutils literal notranslate\">from_email</code>: The sender’s address. Both <code class=\"docutils literal notranslate\">fred&#64;example.com</code> and\n<code class=\"docutils literal notranslate\">&quot;Fred&quot; &lt;fred&#64;example.com&gt;</code> forms are legal. If omitted, the\n<a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_FROM_EMAIL</code></a> setting is used.</p></li>\n<li><p><code class=\"docutils literal notranslate\">to</code>: Uma lista de tuplas de endereços dos destinatários.</p></li>\n<li><p><code class=\"docutils literal notranslate\">bcc</code>: uma lista de tuplas de endereços usados no cabeçalho “Bcc” ao enviar o email.</p></li>\n<li><p><code class=\"docutils literal notranslate\">connection</code>: uma instância do email backend. Utilize esse parâmetro se você quiser usar a mesma conexão para múltiplas mensagens. Se omitido, uma nova conexão é criada quando a função <code class=\"docutils literal notranslate\">send()</code> é chamada.</p></li>\n<li><p><code class=\"docutils literal notranslate\">attachments</code>: A list of attachments to put on the message. These can\nbe either <a class=\"reference external\" href=\"https://docs.python.org/3/library/email.mime.html#email.mime.base.MIMEBase\" title=\"(em Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">MIMEBase</code></a> instances, or <code class=\"docutils literal notranslate\">(filename,\ncontent, mimetype)</code> triples.</p></li>\n<li><p><code class=\"docutils literal notranslate\">headers</code>: um dicionário de cabeçalhos extras para colocar na mensagem. As chaves são os nomes dos cabeçalhos, valores são os valores do cabeçalho. É responsabilidade de quem chama garantir que os nomes e valores dos cabeçalhos estão no formato correto para uma mensagem de email. O atributo correspondente é <code class=\"docutils literal notranslate\">extra_headers</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">cc</code>: uma lista ou tupla de endereços de destinatários usados no cabeçalho “Cc” no envio do email.</p></li>\n<li><p><code class=\"docutils literal notranslate\">reply_to</code>: uma lista ou tupla de endereços de destinatários usados no cabeçalho “Reply-To” no envio do email.</p></li>\n</ul>\n<p>Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"kn\">import</span> EmailMessage\n\nemail <span class=\"o\">=</span> EmailMessage<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;Body goes here&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">[</span><span class=\"s1\">&#39;to1@example.com&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to2@example.com&#39;</span><span class=\"p\">],</span>\n    <span class=\"p\">[</span><span class=\"s1\">&#39;bcc@example.com&#39;</span><span class=\"p\">],</span>\n    reply_to<span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;another@example.com&#39;</span><span class=\"p\">],</span>\n    headers<span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;Message-ID&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;foo&#39;</span><span class=\"p\">},</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>A classe possui os seguintes métodos:</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">send(fail_silently=False)</code> envia a mensagem. Se uma conexão foi especificada quando o email foi construído, a conexão será usada. Caso contrário, uma instância do backend padrão será instanciada e usada. Se o argumento nomeado <code class=\"docutils literal notranslate\">fail_silently</code> é <code class=\"docutils literal notranslate\">True</code>, exceções lançadas durante o envio da mensagem serão invalidadas. Uma lista de destinatários vazia não irá lançar uma exceção.</p></li>\n<li><p><code class=\"docutils literal notranslate\">message()</code> constructs a <code class=\"docutils literal notranslate\">django.core.mail.SafeMIMEText</code> object (a\nsubclass of Python’s <a class=\"reference external\" href=\"https://docs.python.org/3/library/email.mime.html#email.mime.text.MIMEText\" title=\"(em Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">MIMEText</code></a> class) or a\n<code class=\"docutils literal notranslate\">django.core.mail.SafeMIMEMultipart</code> object holding the message to be\nsent. If you ever need to extend the\n<a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> class, you’ll probably want to\noverride this method to put the content you want into the MIME object.</p></li>\n<li><p><code class=\"docutils literal notranslate\">recipients()</code> retorna uma lista de todos os destinatários da mensagem, independentemente de eles serem gravados nos atributos <code class=\"docutils literal notranslate\">to</code>, <code class=\"docutils literal notranslate\">cc</code> ou <code class=\"docutils literal notranslate\">bcc</code>. Esse é outro método que você pode precisar sobrescrever ao fazer uma subclasse, porque o servidor SMTP precisa saber toda a lista de destinatários quando a mensagem é enviada. Se você adicionar outra forma de especificar os destinatários em sua classe, eles precisam ser retornados desse método também.</p></li>\n<li><p><code class=\"docutils literal notranslate\">attach()</code> cria um novo anexo de arquivo e adiciona ele a mensagem. Existem duas maneiras de chamar <code class=\"docutils literal notranslate\">attach()</code>:</p>\n<ul>\n<li><p>You can pass it a single argument that is a\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/email.mime.html#email.mime.base.MIMEBase\" title=\"(em Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">MIMEBase</code></a> instance. This will be inserted directly\ninto the resulting message.</p></li>\n<li><p>Alternativamente, você pode passar ao <code class=\"docutils literal notranslate\">attach()</code> três argumentos: <code class=\"docutils literal notranslate\">filename</code>, <code class=\"docutils literal notranslate\">content</code> e <code class=\"docutils literal notranslate\">mimetype</code>. <code class=\"docutils literal notranslate\">filename</code> é o nome do anexo de arquivo que será exibido no email, <code class=\"docutils literal notranslate\">content</code> é a data que estará contida dentro do anexo e <code class=\"docutils literal notranslate\">mimetype</code> é o tipo MIME opcional para o anexo. Se você omitir <code class=\"docutils literal notranslate\">mimetype</code>, o tipo MIME será inferido do nome do anexo de arquivo.</p>\n<p>Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>message<span class=\"o\">.</span>attach<span class=\"p\">(</span><span class=\"s1\">&#39;design.png&#39;</span><span class=\"p\">,</span> img_data<span class=\"p\">,</span> <span class=\"s1\">&#39;image/png&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Se você especificar um <code class=\"docutils literal notranslate\">mimetype</code> do tipo <code class=\"docutils literal notranslate\">message/rfc822</code>, ele também irá aceitar <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">django.core.mail.EmailMessage</code></a> e <a class=\"reference external\" href=\"https://docs.python.org/3/library/email.compat32-message.html#email.message.Message\" title=\"(em Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">email.message.Message</code></a>.</p>\n<p>For a <code class=\"docutils literal notranslate\">mimetype</code> starting with <code class=\"docutils literal notranslate\">text/</code>, content is expected to be a\nstring. Binary data will be decoded using UTF-8, and if that fails, the\nMIME type will be changed to <code class=\"docutils literal notranslate\">application/octet-stream</code> and the data will\nbe attached unchanged.</p>\n<p>Adicionalmente, anexos <code class=\"docutils literal notranslate\">message/rfc822</code> não serão mais codificados com base64 por violarem a <span class=\"target\" id=\"index-2\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc2046.html#section-5.2.1\"><strong>RFC 2046 Section 5.2.1</strong></a>, o que pode causar problemas com a exibição de anexos no <a class=\"reference external\" href=\"https://bugzilla.gnome.org/show_bug.cgi?id=651197\">Evolution</a> e no <a class=\"reference external\" href=\"https://bugzilla.mozilla.org/show_bug.cgi?id=333880\">Thunderbird</a>.</p>\n</li>\n</ul>\n</li>\n<li><p><code class=\"docutils literal notranslate\">attach_file()</code> creates a new attachment using a file from your\nfilesystem. Call it with the path of the file to attach and, optionally,\nthe MIME type to use for the attachment. If the MIME type is omitted, it\nwill be guessed from the filename. You can use it like this:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>message<span class=\"o\">.</span>attach_file<span class=\"p\">(</span><span class=\"s1\">&#39;/images/weather_map.png&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>For MIME types starting with <code class=\"docutils literal notranslate\">text/</code>, binary data is handled as in\n<code class=\"docutils literal notranslate\">attach()</code>.</p>\n</li>\n</ul>\n<section id=\"sending-alternative-content-types\">\n<h4>Enviando tipos de conteúdo alternativos<a class=\"heading-anchor\" href=\"#sending-alternative-content-types\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Pode ser útil incluir múltiplas versões de conteúdo em um email; o exemplo clássico é enviar tanto a versão em texto simples quanto a versão em HTML de uma mensagem. Com a biblioteca de email do Django, você pode fazer isso usando a classe <code class=\"docutils literal notranslate\">EmailMultiAlternatives</code>. Essa subclasse de <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> possui um método <code class=\"docutils literal notranslate\">attach_alternative()</code> para inclusão de versões extras de corpos de mensagens no email. Todos os outros métodos (incluindo a inicialização da classe) são herdados diretamente da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a>.</p>\n<p>Para enviar uma combinação de texto simples e HTML, você pode escrever:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"kn\">import</span> EmailMultiAlternatives\n\nsubject<span class=\"p\">,</span> from_email<span class=\"p\">,</span> to <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to@example.com&#39;</span>\ntext_content <span class=\"o\">=</span> <span class=\"s1\">&#39;This is an important message.&#39;</span>\nhtml_content <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;p&gt;This is an &lt;strong&gt;important&lt;/strong&gt; message.&lt;/p&gt;&#39;</span>\nmsg <span class=\"o\">=</span> EmailMultiAlternatives<span class=\"p\">(</span>subject<span class=\"p\">,</span> text_content<span class=\"p\">,</span> from_email<span class=\"p\">,</span> <span class=\"p\">[</span>to<span class=\"p\">])</span>\nmsg<span class=\"o\">.</span>attach_alternative<span class=\"p\">(</span>html_content<span class=\"p\">,</span> <span class=\"s2\">&quot;text/html&quot;</span><span class=\"p\">)</span>\nmsg<span class=\"o\">.</span>send<span class=\"p\">()</span>\n</code></pre></div>\n<p>Por padrão, o tipo MIME de um parâmetro <code class=\"docutils literal notranslate\">body</code> em uma classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> é <code class=\"docutils literal notranslate\">&quot;text/plain&quot;</code>. É uma boa prática deixar assim, porque isso garante que qualquer destinatário esteja apto a ler o email, independentemente do cliente de email. Porém, se você estiver confiante que seus destinatários podem manipular um tipo alternativo de conteúdi, você pode usar o atributo <code class=\"docutils literal notranslate\">content_subtype</code> da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> para mudar o principal tipo de conteúdo. O principal tipo sempre será “text”<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>, mas você pode mudar o subtipo. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>msg <span class=\"o\">=</span> EmailMessage<span class=\"p\">(</span>subject<span class=\"p\">,</span> html_content<span class=\"p\">,</span> from_email<span class=\"p\">,</span> <span class=\"p\">[</span>to<span class=\"p\">])</span>\nmsg<span class=\"o\">.</span>content_subtype <span class=\"o\">=</span> <span class=\"s2\">&quot;html&quot;</span>  <span class=\"c1\"># Main content is now text/html</span>\nmsg<span class=\"o\">.</span>send<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"email-backends\">\n<span id=\"topic-email-backends\"></span><h2>Backends de email<a class=\"heading-anchor\" href=\"#email-backends\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>O envio de email em si é manipulado pelo email backend.</p>\n<p>A classe do email backend tem os métodos a seguir:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">open()</code> instancia uma conexão de longa duração para envio de email.</p></li>\n<li><p><code class=\"docutils literal notranslate\">close()</code> fecha a conexão atual de envio de email.</p></li>\n<li><p><code class=\"docutils literal notranslate\">send_messages(email_messages)</code> envia uma lista de objetos da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a>. Se a conexão não estiver aberta, essa chamada irá implicitamente abrir a conexão, e fechar a conexão posteriormente. Se a conexão já estiver aberta, ela será mantida aberta depois de o email ser enviado.</p></li>\n</ul>\n<p>Ela também pode ser usada como em um gerenciador de contexto, que irá automaticamente chamar <code class=\"docutils literal notranslate\">open()</code> e <code class=\"docutils literal notranslate\">close()</code> conforme necessário:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core</span> <span class=\"kn\">import</span> mail\n\n<span class=\"k\">with</span> mail<span class=\"o\">.</span>get_connection<span class=\"p\">()</span> <span class=\"k\">as</span> connection<span class=\"p\">:</span>\n    mail<span class=\"o\">.</span>EmailMessage<span class=\"p\">(</span>\n        subject1<span class=\"p\">,</span> body1<span class=\"p\">,</span> from1<span class=\"p\">,</span> <span class=\"p\">[</span>to1<span class=\"p\">],</span>\n        connection<span class=\"o\">=</span>connection<span class=\"p\">,</span>\n    <span class=\"p\">)</span><span class=\"o\">.</span>send<span class=\"p\">()</span>\n    mail<span class=\"o\">.</span>EmailMessage<span class=\"p\">(</span>\n        subject2<span class=\"p\">,</span> body2<span class=\"p\">,</span> from2<span class=\"p\">,</span> <span class=\"p\">[</span>to2<span class=\"p\">],</span>\n        connection<span class=\"o\">=</span>connection<span class=\"p\">,</span>\n    <span class=\"p\">)</span><span class=\"o\">.</span>send<span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"obtaining-an-instance-of-an-email-backend\">\n<h3>Obtendo uma instância de um email backend<a class=\"heading-anchor\" href=\"#obtaining-an-instance-of-an-email-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>A funçção <a class=\"reference internal\" href=\"#django.core.mail.get_connection\" title=\"django.core.mail.get_connection\"><code class=\"xref py py-meth docutils literal notranslate\">get_connection()</code></a> em <code class=\"docutils literal notranslate\">django.core.mail</code> retorna uma instância do email backend que você pode utilizar.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.get_connection\">\n<span class=\"sig-name descname\">get_connection</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">backend<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\"><span class=\"o\">*</span>args</em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.mail.get_connection\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Por padrão, uma chamada para <code class=\"docutils literal notranslate\">get_connection()</code> irá retornar uma instância do email backend definido em <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_BACKEND</code></a>. Se você especificar o argumento <code class=\"docutils literal notranslate\">backend</code>, uma instância desse backend será criada.</p>\n<p>O argumento <code class=\"docutils literal notranslate\">fail_silently</code> controla como o backend deve manipular erros. Se <code class=\"docutils literal notranslate\">fail_silently</code> é True, exceções durante o processo de envio de email serão ignoradas silenciosamente.</p>\n<p>Todos os outros argumentos são passados diretamente para o construtor do email backend.</p>\n<p>O Django é fornecido com vários backends de envio de email. Com exceção do backend SMTP (que é o padrão), esses backends só são úteis durante testes e desenvolvimento. Se você tiver requisitos especiais de envio de email, você pode <a class=\"reference internal\" href=\"#topic-custom-email-backend\"><span class=\"std std-ref\">escrever o seu próprio email backend</span></a>.</p>\n<section id=\"smtp-backend\">\n<span id=\"topic-email-smtp-backend\"></span><h4>SMTP backend<a class=\"heading-anchor\" href=\"#smtp-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.backends.smtp.EmailBackend\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-prename descclassname\">backends.smtp.</span><span class=\"sig-name descname\">EmailBackend</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">host<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">port<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">username<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">password<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">use_tls<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">fail_silently<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">use_ssl<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">timeout<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ssl_keyfile<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ssl_certfile<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>kwargs</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.mail.backends.smtp.EmailBackend\"><span class=\"visually-hidden\">Link para esta definição</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Este é o backend padrão. Email será enviado através de um servidor SMTP.</p>\n<p>O valor de cada argumento é obtido da respectiva configuração se o argumento for <code class=\"docutils literal notranslate\">None</code>:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">host</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">port</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_PORT\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_PORT</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">username</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST_USER\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_USER</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">password</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST_PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_PASSWORD</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">use_tls</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_USE_TLS\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_USE_TLS</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">use_ssl</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_USE_SSL\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_USE_SSL</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">timeout</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_TIMEOUT\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_TIMEOUT</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">ssl_keyfile</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_SSL_KEYFILE\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_SSL_KEYFILE</code></a></p></li>\n<li><p><code class=\"docutils literal notranslate\">ssl_certfile</code>: <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_SSL_CERTFILE\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_SSL_CERTFILE</code></a></p></li>\n</ul>\n<p>O backend SMTP é a configuração padrão herdada do Django. Se você quiser especificá-la explicitamente, adicione o seguinte as suas configurações:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>EMAIL_BACKEND <span class=\"o\">=</span> <span class=\"s1\">&#39;django.core.mail.backends.smtp.EmailBackend&#39;</span>\n</code></pre></div>\n<p>Se não definido, o <code class=\"docutils literal notranslate\">timeout</code> padrão será o fornecido pela função <a class=\"reference external\" href=\"https://docs.python.org/3/library/socket.html#socket.getdefaulttimeout\" title=\"(em Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">socket.getdefaulttimeout()</code></a>, que por padrão é <code class=\"docutils literal notranslate\">None</code> (sem limite de tempo).</p>\n</dd></dl>\n\n</section>\n<section id=\"console-backend\">\n<span id=\"topic-email-console-backend\"></span><h4>Console backend<a class=\"heading-anchor\" href=\"#console-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Ao invés de enviar emails reais o console backend escreve esses emails que poderiam ser enviados na saída padrão. Por padrão, o console backend direciona para <code class=\"docutils literal notranslate\">stdout</code>. Você pode usar diferentes objetos fornecendo o argumento nomeado <code class=\"docutils literal notranslate\">stream</code> ao construir a conexão.</p>\n<p>Para especificar esse backend, coloque o seguinte nas suas configurações:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>EMAIL_BACKEND <span class=\"o\">=</span> <span class=\"s1\">&#39;django.core.mail.backends.console.EmailBackend&#39;</span>\n</code></pre></div>\n<p>Esse backend não é intencionado para uso em produção – ele é fornecido como uma conveniência que pode ser usado durante o desenvolvimento.</p>\n</section>\n<section id=\"file-backend\">\n<span id=\"topic-email-file-backend\"></span><h4>File backend<a class=\"heading-anchor\" href=\"#file-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>O file backend escreve emails em um arquivo. Um novo arquivo é criado para cada nova sessão que é aberto no backend. O diretório para o qual os arquivos são escritos ou é obitdo da configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_FILE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_FILE_PATH</code></a> ou do argumento nomeado <code class=\"docutils literal notranslate\">file_path</code> ao criar uma conexão com o método <a class=\"reference internal\" href=\"#django.core.mail.get_connection\" title=\"django.core.mail.get_connection\"><code class=\"xref py py-meth docutils literal notranslate\">get_connection()</code></a>.</p>\n<p>Para especificar esse backend, coloque o seguinte nas suas configurações:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>EMAIL_BACKEND <span class=\"o\">=</span> <span class=\"s1\">&#39;django.core.mail.backends.filebased.EmailBackend&#39;</span>\nEMAIL_FILE_PATH <span class=\"o\">=</span> <span class=\"s1\">&#39;/tmp/app-messages&#39;</span> <span class=\"c1\"># change this to a proper location</span>\n</code></pre></div>\n<p>Esse backend não é intencionado para uso em produção – ele é fornecido como uma conveniência que pode ser usado durante o desenvolvimento.</p>\n</section>\n<section id=\"in-memory-backend\">\n<span id=\"topic-email-memory-backend\"></span><h4>In-memory backend<a class=\"heading-anchor\" href=\"#in-memory-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>O <code class=\"docutils literal notranslate\">'locmem'</code> backend armazena mensagens em um atributo especial do módulo <code class=\"docutils literal notranslate\">django.core.mail</code>. O atributo <code class=\"docutils literal notranslate\">outbox</code> é criado quando a primeira mensagem é enviada. É uma lista com uma instância da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> para cada mensagem que possa ser enviada.</p>\n<p>Para especificar esse backend, coloque o seguinte nas suas configurações:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>EMAIL_BACKEND <span class=\"o\">=</span> <span class=\"s1\">&#39;django.core.mail.backends.locmem.EmailBackend&#39;</span>\n</code></pre></div>\n<p>Esse backend não é intencionado para uso em produção – ele é fornecido como uma conveniência que pode ser usado durante o desenvolvimento e teste.</p>\n<p>Django’s test runner <a class=\"reference internal\" href=\"/pt-br/3.0/topics/testing/tools/#topics-testing-email\"><span class=\"std std-ref\">automatically uses this backend for testing</span></a>.</p>\n</section>\n<section id=\"dummy-backend\">\n<span id=\"topic-email-dummy-backend\"></span><h4>Dummy backend<a class=\"heading-anchor\" href=\"#dummy-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Como o nome sugere o dummy backend não faz nada com suas mensagens. Para definir esse backend, coloque o seguinte em suas configurações:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>EMAIL_BACKEND <span class=\"o\">=</span> <span class=\"s1\">&#39;django.core.mail.backends.dummy.EmailBackend&#39;</span>\n</code></pre></div>\n<p>Esse backend não é intencionado para uso em produção – ele é fornecido como uma conveniência que pode ser usado durante o desenvolvimento.</p>\n</section>\n</section>\n<section id=\"defining-a-custom-email-backend\">\n<span id=\"topic-custom-email-backend\"></span><h3>Definindo um email backend customizado<a class=\"heading-anchor\" href=\"#defining-a-custom-email-backend\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se você precisa mudar como os emails são enviados você pode escrever o seu próprio email backend. A configuração <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_BACKEND</code></a> em seu arquivo de configurações é então o caminho Python do import para a sua classe backend.</p>\n<p>Bckends de email customizados devem ser subclasses de <code class=\"docutils literal notranslate\">BaseEmailBackend</code> que está localizada no módulo <code class=\"docutils literal notranslate\">django.core.mail.backends.base</code>. Um backend de email customizado deve implementar o método <code class=\"docutils literal notranslate\">send_messages(email_messages)</code>. Esse método recebe uma lista de instâncias da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> e retorna o número de mensagens entregues com sucesso. Se o seu backend possui qualquer conceito de sessão persistente ou conexão, você também deve implementar os métodos <code class=\"docutils literal notranslate\">open()</code> e <code class=\"docutils literal notranslate\">close()</code>. Consulte <code class=\"docutils literal notranslate\">smtp.EmailBackend</code> para uma implementação de referência.</p>\n</section>\n<section id=\"sending-multiple-emails\">\n<span id=\"topics-sending-multiple-emails\"></span><h3>Enviando mútiplos emails<a class=\"heading-anchor\" href=\"#sending-multiple-emails\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Estabelecer e fechar uma conexão SMTP (ou qualquer outra conexão de rede, nesse caso) é um processo custoso. Se você tem muitos emails para enviar, faz sentido reutilizar uma conexão SMTP, ao invés de criar e destruir uma conexão toda vez que você desejar enviar um email.</p>\n<p>Existem duas maneiras de dizer a um email backend para reutilizar uma conexão.</p>\n<p>Primeiramente, você pode usar o método <code class=\"docutils literal notranslate\">send_messages()</code>. <code class=\"docutils literal notranslate\">send_messages()</code> recebe uma lista de instâncias da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> (ou de subclasses), e envia todas elas usando uma única conexão.</p>\n<p>Por exemplo, se você tiver uma função chamada <code class=\"docutils literal notranslate\">get_notification_email()</code> que retorna uma lista de objetos da classe <a class=\"reference internal\" href=\"#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\">EmailMessage</code></a> representando algum email periódico que você gostaria de enviar, voê pode enviá-los usando uma única chamada para send_messages:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core</span> <span class=\"kn\">import</span> mail\nconnection <span class=\"o\">=</span> mail<span class=\"o\">.</span>get_connection<span class=\"p\">()</span>   <span class=\"c1\"># Use default email connection</span>\nmessages <span class=\"o\">=</span> get_notification_email<span class=\"p\">()</span>\nconnection<span class=\"o\">.</span>send_messages<span class=\"p\">(</span>messages<span class=\"p\">)</span>\n</code></pre></div>\n<p>Neste exemplo, a chamada <code class=\"docutils literal notranslate\">send_messages()</code> abre uma conexão no backend, envia a lista de mensagens, e então fecha a conexão novamente.</p>\n<p>A segunda abordagem é usar os métodos <code class=\"docutils literal notranslate\">open()</code> e <code class=\"docutils literal notranslate\">close()</code> no backend de email para manualmente controlar a conexão. <code class=\"docutils literal notranslate\">send_messages()</code> não irá abrir ou fechar manualmente a conexão se ela já estiver aberta, se você manualmente abrir a conexão, você pode controlar quando ela será fechada. Por exemplo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.core</span> <span class=\"kn\">import</span> mail\nconnection <span class=\"o\">=</span> mail<span class=\"o\">.</span>get_connection<span class=\"p\">()</span>\n\n<span class=\"c1\"># Manually open the connection</span>\nconnection<span class=\"o\">.</span>open<span class=\"p\">()</span>\n\n<span class=\"c1\"># Construct an email message that uses the connection</span>\nemail1 <span class=\"o\">=</span> mail<span class=\"o\">.</span>EmailMessage<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;Body goes here&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">[</span><span class=\"s1\">&#39;to1@example.com&#39;</span><span class=\"p\">],</span>\n    connection<span class=\"o\">=</span>connection<span class=\"p\">,</span>\n<span class=\"p\">)</span>\nemail1<span class=\"o\">.</span>send<span class=\"p\">()</span> <span class=\"c1\"># Send the email</span>\n\n<span class=\"c1\"># Construct two more messages</span>\nemail2 <span class=\"o\">=</span> mail<span class=\"o\">.</span>EmailMessage<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;Body goes here&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">[</span><span class=\"s1\">&#39;to2@example.com&#39;</span><span class=\"p\">],</span>\n<span class=\"p\">)</span>\nemail3 <span class=\"o\">=</span> mail<span class=\"o\">.</span>EmailMessage<span class=\"p\">(</span>\n    <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;Body goes here&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;from@example.com&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">[</span><span class=\"s1\">&#39;to3@example.com&#39;</span><span class=\"p\">],</span>\n<span class=\"p\">)</span>\n\n<span class=\"c1\"># Send the two emails in a single call -</span>\nconnection<span class=\"o\">.</span>send_messages<span class=\"p\">([</span>email2<span class=\"p\">,</span> email3<span class=\"p\">])</span>\n<span class=\"c1\"># The connection was already open so send_messages() doesn&#39;t close it.</span>\n<span class=\"c1\"># We need to manually close the connection.</span>\nconnection<span class=\"o\">.</span>close<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"configuring-email-for-development\">\n<h2>Configurando o email para o desenvolvimento<a class=\"heading-anchor\" href=\"#configuring-email-for-development\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Existem momentos em que você não quer que o Django envie quaisquer emails. Por exemplo, enquanto estiver desenvolvendo um website, você provavelmente não quer enviar milhares de emails – mas você pode querer validar que esses email serão enviados para as pessoas certas nas condições certas, e que esses emails irão conter o conteúdo correto.</p>\n<p>A maneira mais simples de configurar email para desenvolvimento local é usar o  <a class=\"reference internal\" href=\"#topic-email-console-backend\"><span class=\"std std-ref\">console</span></a> email backend. Esse backend redireciona todos os emails para stdout, permitindo que você inspecione o conteúdo do email.</p>\n<p>O <a class=\"reference internal\" href=\"#topic-email-file-backend\"><span class=\"std std-ref\">file</span></a> email backend também pode ser útil durante o desenvolvimento – esse backend despeja o conteúdo de todoas as conexões SMTP para um arquivo que pode ser inspecionado quando você desejar.</p>\n<p>Outra abordagem é usar um servidor SMTP “burro” que recebe os emails localmente e exibe-os no terminal, mas que não os envia. Python possui uma maneira embutida para fazer isso com um único comando:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>python <span class=\"o\">-</span>m smtpd <span class=\"o\">-</span>n <span class=\"o\">-</span>c DebuggingServer localhost<span class=\"p\">:</span><span class=\"mi\">1025</span>\n</code></pre></div>\n<p>This command will start a minimal SMTP server listening on port 1025 of\nlocalhost. This server prints to standard output all email headers and the\nemail body. You then only need to set the <a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST</code></a> and\n<a class=\"reference internal\" href=\"/pt-br/3.0/ref/settings/#std-setting-EMAIL_PORT\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_PORT</code></a> accordingly. For a more detailed discussion of SMTP\nserver options, see the Python documentation for the <a class=\"reference external\" href=\"https://docs.python.org/3/library/smtpd.html#module-smtpd\" title=\"(em Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">smtpd</code></a> module.</p>\n<p>Para mais informações sobre testes unitários no envio de emails em suas aplicações, veja a seção <a class=\"reference internal\" href=\"/pt-br/3.0/topics/testing/tools/#topics-testing-email\"><span class=\"std std-ref\">Serviços de E-mail</span></a> sobre testes da documentação.</p>\n</section>","rootId":"module-django.core.mail","toc":[{"title":"Exemplo rápido","anchor":"quick-example","children":[]},{"title":"send_mail()","anchor":"send-mail","children":[]},{"title":"send_mass_mail()","anchor":"send-mass-mail","children":[{"title":"send_mass_mail() vs. send_mail()","anchor":"send-mass-mail-vs-send-mail","children":[]}]},{"title":"mail_admins()","anchor":"mail-admins","children":[]},{"title":"mail_managers()","anchor":"mail-managers","children":[]},{"title":"Exemplos","anchor":"examples","children":[]},{"title":"Prevenindo injeção de cabeçalhos","anchor":"preventing-header-injection","children":[]},{"title":"A classe EmailMessage","anchor":"the-emailmessage-class","children":[{"title":"Objetos EmailMessage","anchor":"emailmessage-objects","children":[{"title":"Enviando tipos de conteúdo alternativos","anchor":"sending-alternative-content-types","children":[]}]}]},{"title":"Backends de email","anchor":"email-backends","children":[{"title":"Obtendo uma instância de um email backend","anchor":"obtaining-an-instance-of-an-email-backend","children":[{"title":"SMTP backend","anchor":"smtp-backend","children":[]},{"title":"Console backend","anchor":"console-backend","children":[]},{"title":"File backend","anchor":"file-backend","children":[]},{"title":"In-memory backend","anchor":"in-memory-backend","children":[]},{"title":"Dummy backend","anchor":"dummy-backend","children":[]}]},{"title":"Definindo um email backend customizado","anchor":"defining-a-custom-email-backend","children":[]},{"title":"Enviando mútiplos emails","anchor":"sending-multiple-emails","children":[]}]},{"title":"Configurando o email para o desenvolvimento","anchor":"configuring-email-for-development","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Usando o Django","url":"/pt-br/3.0/topics/"}],"prev":{"docname":"topics/signing","title":"Cryptographic signing","url":"/pt-br/3.0/topics/signing/"},"next":{"docname":"topics/i18n/index","title":"Internacionalização e localização","url":"/pt-br/3.0/topics/i18n/"},"formats":{"html":"/pt-br/3.0/topics/email/","markdown":"/pt-br/3.0/topics/email.md","json":"/pt-br/3.0/topics/email.json"},"source":"https://github.com/django/django/blob/stable/3.0.x/docs/topics/email.txt","official":"https://docs.djangoproject.com/pt-br/3.0/topics/email/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}