{"title":"メールを送信する","version":"2.1","locale":"ja","docname":"topics/email","url":"/ja/2.1/topics/email/","canonical":"https://djangodocs.dev/ja/2.1/topics/email/","summary":"Python では smtplib モジュールを使ってメールを比較的簡単に送ることができますが、Django はさらにいくつかの軽いラッパーを用意しています。","html":"<span id=\"sending-email\"></span><h1>メールを送信する<a class=\"heading-anchor\" href=\"#module-django.core.mail\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Python では <a class=\"reference external\" href=\"https://docs.python.org/3/library/smtplib.html#module-smtplib\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">smtplib</code></a> モジュールを使ってメールを比較的簡単に送ることができますが、Django はさらにいくつかの軽いラッパーを用意しています。これらのラッパーは、 メールをよりすばやく送信したり、開発中にメール送信をテストしたり、SMTP を使用できないプラットフォームをサポートしたりするために用意されています。</p>\n<p>コードは <code class=\"docutils literal notranslate\">django.core.mail</code> モジュールにあります。</p>\n<section id=\"quick-example\">\n<h2>簡単な例<a class=\"heading-anchor\" href=\"#quick-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>次の 2 文を書くことで、</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>設定内の <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST</code></a> と <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_PORT\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_PORT</code></a> で指定された SMTP ホストとポートを使用して、メールが送信されます。<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_HOST_USER\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_USER</code></a> と <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_HOST_PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST_PASSWORD</code></a> が指定されている場合は、SMTP サーバーの認証に使われます。そして、<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_USE_TLS\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_USE_TLS</code></a> と <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_USE_SSL\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_USE_SSL</code></a> 設定により、セキュアコネクションを使うかどうかをコントロールします。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><code class=\"docutils literal notranslate\">django.core.mail</code> で送信されるメールの文字セットは、<a class=\"reference internal\" href=\"/ja/2.1/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 to this heading</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>メールを送信するもっとも簡単な方法は、<code class=\"docutils literal notranslate\">django.core.mail.send_mail()</code> を使うことです。</p>\n<p><code class=\"docutils literal notranslate\">subject</code>、<code class=\"docutils literal notranslate\">message</code>、<code class=\"docutils literal notranslate\">from_email</code>、<code class=\"docutils literal notranslate\">recipient_list</code> の 4 つの引数は必須です。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">subject</code>: 文字列。</p></li>\n<li><p><code class=\"docutils literal notranslate\">message</code>: 文字列。</p></li>\n<li><p><code class=\"docutils literal notranslate\">from_email</code>: 文字列。</p></li>\n<li><p><code class=\"docutils literal notranslate\">recipient_list</code>: メールアドレスを表す文字列のリスト。<code class=\"docutils literal notranslate\">recipient_list</code> の各メンバーは、メールメッセージの &quot;To:&quot; フィールドで他の受信者を見ることができます。</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=\"(in 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=\"(in 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=\"(in 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>: SMTP サーバー認証のためのユーザー名で、省略可能。指定されなかった場合、Django <a class=\"reference internal\" href=\"/ja/2.1/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>: SMTP サーバー認証のためのパスワードで、省略可能。指定されなかった場合、Django は <a class=\"reference internal\" href=\"/ja/2.1/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>: メール送信のために使うバックエンドで、省略可能。指定しなかった場合、デフォルトのバックエンドのインスタンスが使われます。詳しくは <a class=\"reference internal\" href=\"#topic-email-backends\"><span class=\"std std-ref\">メールのバックエンド</span></a> を参照してください。</p></li>\n<li><p><code class=\"docutils literal notranslate\">html_message</code>: <code class=\"docutils literal notranslate\">html_message</code> が指定された場合、送信されるメールは <em class=\"mimetype\">multipart/alternative</em> となり、<em class=\"mimetype\">text/plain</em> コンテンツタイプを持つ <code class=\"docutils literal notranslate\">message</code> と <em class=\"mimetype\">text/html</em> コンテンツタイプを持つ <code class=\"docutils literal notranslate\">html_message</code> を合わせ持つものになります。</p></li>\n</ul>\n<p>返り値は、送信に成功したメッセージの数です (送信されるメッセージが 1 つだけの場合もあるため、<code class=\"docutils literal notranslate\">0</code> や <code class=\"docutils literal notranslate\">1</code> になることもあります)。</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 to this heading</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 to this definition</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> は、大量のメール送信を扱うために用意されています。</p>\n<p><code class=\"docutils literal notranslate\">datatuple</code> はメッセージの集合を表すタプルです。タプル内の各要素は、それぞれ1種類のメッセージを表すタプルであり、次の形式を持ちます。</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>、<code class=\"docutils literal notranslate\">auth_password</code> の 3 つは、<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><code class=\"docutils literal notranslate\">datatuple</code> に含まれる各要素は、最終的には別々のメールメッセージとなります。<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> における挙動と同じく、<code class=\"docutils literal notranslate\">recipient_list</code> 内の受信者は、メールメッセージの &quot;To:&quot; フィールドに書かれている他の受信者のアドレスを見ることができます。</p>\n<p>たとえば、次のコードは異なる 2 つのメッセージを 異なる 2 つの受信者のセットに送信します。しかし、メールサーバーへの接続は 1 つしか開かれません。</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>戻り値は、メッセージ送信に成功した数です。</p>\n<section id=\"send-mass-mail-vs-send-mail\">\n<h3><code class=\"docutils literal notranslate\">send_mass_mail()</code> と <code class=\"docutils literal notranslate\">send_mail()</code> の比較<a class=\"heading-anchor\" href=\"#send-mass-mail-vs-send-mail\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><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> と <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> 違いは、<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> が実行されるごとに毎回接続を開くのに対して、<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> はすべてのメッセージに対して 1 つだけ接続を使います。これにより、<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> の方が若干効率がよくなっています。</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 to this heading</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 to this definition</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> は、<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-ADMINS\"><code class=\"xref std std-setting docutils literal notranslate\">ADMINS</code></a> 設定で定義されているサイト管理者 (admin) に対してメールを送信するためのショートカットです。</p>\n<p><code class=\"docutils literal notranslate\">mail_admins()</code> prefixes the subject with the value of the\n<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_SUBJECT_PREFIX\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_SUBJECT_PREFIX</code></a> setting, which is <code class=\"docutils literal notranslate\">&quot;[Django] &quot;</code> by default.</p>\n<p>The &quot;From:&quot; header of the email will be the value of the\n<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-SERVER_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">SERVER_EMAIL</code></a> setting.</p>\n<p>This method exists for convenience and readability.</p>\n<p>If <code class=\"docutils literal notranslate\">html_message</code> is provided, the resulting email will be a\n<em class=\"mimetype\">multipart/alternative</em> email with <code class=\"docutils literal notranslate\">message</code> as the\n<em class=\"mimetype\">text/plain</em> content type and <code class=\"docutils literal notranslate\">html_message</code> as the\n<em class=\"mimetype\">text/html</em> content type.</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 to this heading</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 to this definition</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> は、<code class=\"docutils literal notranslate\">mail_admins()</code> とほぼ同じで、<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-MANAGERS\"><code class=\"xref std std-setting docutils literal notranslate\">MANAGERS</code></a> 設定で定義されているサイト管理者 (manager) にメールを送信します。</p>\n</section>\n<section id=\"examples\">\n<h2>例<a class=\"heading-anchor\" href=\"#examples\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>以下の例は、<a class=\"reference external\" href=\"mailto:john&#37;&#52;&#48;example&#46;com\">john<span>&#64;</span>example<span>&#46;</span>com</a> と <a class=\"reference external\" href=\"mailto:jane&#37;&#52;&#48;example&#46;com\">jane<span>&#64;</span>example<span>&#46;</span>com</a> に1つのメールを送信します。2人とも &quot;To:&quot; 内に宛先が見られます。</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>次の例は、<a class=\"reference external\" href=\"mailto:john&#37;&#52;&#48;example&#46;com\">john<span>&#64;</span>example<span>&#46;</span>com</a> と <a class=\"reference external\" href=\"mailto:jane&#37;&#52;&#48;example&#46;com\">jane<span>&#64;</span>example<span>&#46;</span>com</a> にメールを送信しますが、受信者はどちらも個別のメールを受け取ります。</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>ヘッダインジェクションを防止する<a class=\"heading-anchor\" href=\"#preventing-header-injection\"><span class=\"visually-hidden\">Link to this heading</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\">ヘッダインジェクション</a> は、攻撃者が 、スクリプトで生成されたメールメッセージの &quot;To:&quot; と &quot;From:&quot; をコントロールするために、メールヘッダを挿入してしまうセキュリティ上の脆弱性です。</p>\n<p>上述した Django のメール機能は、ヘッダー値の改行を禁止することによってヘッダインジェクションを防ぎます。 <code class=\"docutils literal notranslate\">subject</code>、<code class=\"docutils literal notranslate\">from_email</code>、<code class=\"docutils literal notranslate\">recipient_list</code> のいずれかに 改行 (Unix、Windows ないし Mac のスタイル) が含まれている場合、email 関数 (例えば <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>) は <code class=\"docutils literal notranslate\">django.core.mail.BadHeaderError</code> (<code class=\"docutils literal notranslate\">ValueError</code> のサブクラス) 投げるため、メールは送信されません。メール送信を行う関数にデータを渡す前に、開発者は責任を持ってすべてのデータを検証しておく必要があります。</p>\n<p><code class=\"docutils literal notranslate\">message</code> が文字列の最初にヘッダを含む場合、ヘッダは単にメールメッセージの最初のビットとして表示されます。</p>\n<p>次の例は、リクエストの POST データから <code class=\"docutils literal notranslate\">subject</code>、<code class=\"docutils literal notranslate\">message</code>、<code class=\"docutils literal notranslate\">from_email</code> を取得し、それを <a class=\"reference external\" href=\"mailto:admin&#37;&#52;&#48;example&#46;com\">admin<span>&#64;</span>example<span>&#46;</span>com</a> に送信し、完了したら &quot;/contact/thanks/&quot; にリダイレクトします。</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><code class=\"docutils literal notranslate\">EmailMessage</code> クラス<a class=\"heading-anchor\" href=\"#the-emailmessage-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>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> と <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> 関数は <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><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> クラスの機能のすべてが <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> やその他のラッパーで使用可能というわけではありません。高度な機能を使いたい場合 (例えば BCC の利用、ファイル添付やマルチパートのメールなど) <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<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>これは設計特性です。<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> およびその関連の関数は、元は Django が提供した唯一のインタフェースでした。しかし、受け入れるパラメータのリストが次第に肥大化してきてしまったので、よりオブジェクト指向的な設計に移行し、元の関数は後方互換性確保のためだけに残すことになりました。</p>\n</aside>\n<p><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> はメールメッセージ本体を作成する役割を担っており、その後、<a class=\"reference internal\" href=\"#topic-email-backends\"><span class=\"std std-ref\">メールのバックエンド</span></a> がメールを送信する役目を果たします。</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 simple\n<code class=\"docutils literal notranslate\">send()</code> method for sending a single email. If you need to send multiple\nmessages, the email 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><code class=\"docutils literal notranslate\">EmailMessage</code> オブジェクト<a class=\"heading-anchor\" href=\"#emailmessage-objects\"><span class=\"visually-hidden\">Link to this heading</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><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\">send()</code> メソッドを呼ぶ前のタイミングでセットされます。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">subject</code>: メールの件名の行。</p></li>\n<li><p><code class=\"docutils literal notranslate\">body</code>: 本文のテキスト。プレーンテキストのメッセージでなければなりません。</p></li>\n<li><p><code class=\"docutils literal notranslate\">from_email</code>: 送信者のアドレス。<code class=\"docutils literal notranslate\">fred&#64;example.com</code> と <code class=\"docutils literal notranslate\">Fred &lt;fred&#64;example.com&gt;</code> の2つの形式が使用できます。省略した場合、<a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-DEFAULT_FROM_EMAIL\"><code class=\"xref std std-setting docutils literal notranslate\">DEFAULT_FROM_EMAIL</code></a> 設定が使われます。</p></li>\n<li><p><code class=\"docutils literal notranslate\">to</code>: 受信者のメールアドレスのリストまたはタプル。</p></li>\n<li><p><code class=\"docutils literal notranslate\">bcc</code>: メールを送信するときに &quot;Bcc&quot; ヘッダ内で使われるメールアドレスのリストまたはタプル。</p></li>\n<li><p><code class=\"docutils literal notranslate\">connection</code>: メールバックエンドのインスタンス。複数のメッセージに同一の接続を使いたいときに指定します。省略した場合、<code class=\"docutils literal notranslate\">send()</code> が呼ばれる時に新しい接続が生成されます。</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=\"(in 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>: メッセージに追加するヘッダーの辞書。キーはヘッダ名、値はヘッダ値です。メールメッセージに対して適切なヘッダ名と値にするのは、呼び出す側の責任です。対応する属性は <code class=\"docutils literal notranslate\">extra_headers</code> です。</p></li>\n<li><p>メールを送信するときに &quot;Cc&quot; ヘッダ内で使われる、受信者のアドレスのリストまたはタプル。</p></li>\n<li><p><code class=\"docutils literal notranslate\">reply_to</code>: メールを送信するときに &quot;Reply-To&quot; ヘッダ内で使われる、受信者のアドレスのリストまたはタプル。</p></li>\n</ul>\n<p>例:</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>このクラスには以下のメソッドがあります。</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\">send(fail_silently=False)</code> はメッセージを送信します。メールの構築時に接続が指定された場合、その接続が使用されます。 それ以外の場合は、デフォルトのバックエンドがインスタンス化され、使用されます。 キーワード引数 <code class=\"docutils literal notranslate\">fail_silently</code> が <code class=\"docutils literal notranslate\">True</code> の場合、メッセージの送信中に投げられた例外は破棄されます。 受信者の空のリストは例外を投げません。</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=\"(in 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> は、<code class=\"docutils literal notranslate\">to</code>、<code class=\"docutils literal notranslate\">cc</code>、<code class=\"docutils literal notranslate\">bcc</code> のいずれかの属性に記録されている、メッセージの全ての受信者のリストを返します。サブクラス化するときには、メッセージの送信時に SMTP サーバが受信者の完全な一覧を必要とするため、このメソッドもオーバーライドする必要があります。クラス内で受信者を指定する別の方法を追加する場合は、このメソッドからも返される必要があります。</p></li>\n<li><p><code class=\"docutils literal notranslate\">attach()</code> は新しい添付ファイルを作成し、メッセージに追加します。<code class=\"docutils literal notranslate\">attach()</code> を呼ぶには2 つの方法があります。</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=\"(in 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>もしくは、<code class=\"docutils literal notranslate\">attach()</code> の 3 つの引数を引き渡します: <code class=\"docutils literal notranslate\">filename</code>、<code class=\"docutils literal notranslate\">content</code>、<code class=\"docutils literal notranslate\">mimetype</code> です。<code class=\"docutils literal notranslate\">filename</code> は、メール内に表示される添付ファイルの名前です。<code class=\"docutils literal notranslate\">content``は、添付ファイル内に含まれるデータです。``mimetype</code> は添付ファイルに対する MIME タイプで、省略可能です。<code class=\"docutils literal notranslate\">mimetype</code> を省略した場合、MIME コンテンツタイプは添付ファイルのファイル名から推測されます。</p>\n<p>例:</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><code class=\"docutils literal notranslate\">message/rfc822</code> の <code class=\"docutils literal notranslate\">mimetype</code> を指定した場合、<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> と <a class=\"reference external\" href=\"https://docs.python.org/3/library/email.compat32-message.html#email.message.Message\" title=\"(in 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>さらに、<code class=\"docutils literal notranslate\">message/rfc822</code> 添付ファイルは <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> の Base64 エンコード違反とはなりません。これは、<a class=\"reference external\" href=\"https://bugzilla.gnome.org/show_bug.cgi?id=651197\">Evolution</a> と <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> は、あなたのファイルシステムにあるファイルを使って新しい添付ファイルを作成します。添付するファイルのパスとともに呼び出してください。MIME タイプも指定できますが省略可能です。MIME タイプを省略した場合、ファイル名から推測されます。最も簡単な使い方は以下の通りです:</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>代替のコンテンツタイプを送信する<a class=\"heading-anchor\" href=\"#sending-alternative-content-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>メール内にコンテンツの複数のバージョンを入れておくのが便利です; 古典的な手法では、メッセージをテキストと HTML の両方のバージョンで送信します。 Django のメールのライブラリで、<code class=\"docutils literal notranslate\">EmailMultiAlternatives</code> を使ってこれを実現できます。この <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\">attach_alternative()</code> があり、E メール内のメッセージ本文の別バージョンを追加することができます。(クラスの初期化を含む) 他のメソッドは <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>テキストと HTML の組み合わせを送るには、以下のように書きます:</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>デフォルトでは、<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\">body</code> パラメータの MIME タイプは <code class=\"docutils literal notranslate\">&quot;text/plain&quot;</code> です。この設定だとメールクライアントにかかわらず全ての受信者がメールを読むことができるので、このままにしておくのが実用的です。しかし、受信者が代替のコンテンツタイプを扱えることが確かな場合には、<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\">content_subtype</code> 属性を使ってメインのコンテンツタイプを変更することもできます。主なタイプは常に <code class=\"docutils literal notranslate\">&quot;text&quot;</code> ですが、サブタイプを変更することができます。例えば:</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>メールのバックエンド<a class=\"heading-anchor\" href=\"#email-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>実際のメール送信は、メールバックエンドによって処理されます。</p>\n<p>メールバックエンドのクラスには以下のメソッドがあります:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">open()</code> は、長寿命のメール送信の接続をインスタンス化します。</p></li>\n<li><p><code class=\"docutils literal notranslate\">close()</code> は、現在のメール送信の接続を閉じます。</p></li>\n<li><p><code class=\"docutils literal notranslate\">send_messages(email_messages)</code> は、<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></li>\n</ul>\n<p>コンテキストマネジャーとしても使うことができ、必要に応じて自動的に <code class=\"docutils literal notranslate\">open()</code> と <code class=\"docutils literal notranslate\">close()</code> 呼びます:</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>メールバックエンドのインスタンスを取得する<a class=\"heading-anchor\" href=\"#obtaining-an-instance-of-an-email-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><code class=\"docutils literal notranslate\">django.core.mail</code> 内の <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<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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>デフォルトでは、<code class=\"docutils literal notranslate\">get_connection()</code> を呼び出すと <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_BACKEND</code></a> 内で指定されたメールバックエンドのインスタンスを返します。<code class=\"docutils literal notranslate\">backend</code> 引数を指定した場合、そのバックエンドがインスタンス化されます。</p>\n<p><code class=\"docutils literal notranslate\">fail_silently</code> 引数は、バックエンドがエラーをどのように扱うかをコントロールします。<code class=\"docutils literal notranslate\">fail_silently</code> が True の場合、メール送信プロセスの間に発生した例外は何の通知もされずに無視されます。</p>\n<p>他の全ての引数は、メールバックエンドのコンストラクタに直接引き渡されます。</p>\n<p>Django には複数のメール送信バックエンドを付属しています。SMTP バックエンド (デフォルトです) を除いて、これらのバックエンドはテストと開発のみで役立ちます。特別なメール送信が必要な場合には、<a class=\"reference internal\" href=\"#topic-custom-email-backend\"><span class=\"std std-ref\">独自のメールバックエンドを記述する</span></a> を参照してください。</p>\n<section id=\"smtp-backend\">\n<span id=\"topic-email-smtp-backend\"></span><h4>SMTP バックエンド<a class=\"heading-anchor\" href=\"#smtp-backend\"><span class=\"visually-hidden\">Link to this heading</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 to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>デフォルトのバックエンド。メールは SMTP サーバを通して送信されます。</p>\n<p>引数が <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=\"/ja/2.1/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=\"/ja/2.1/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=\"/ja/2.1/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=\"/ja/2.1/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=\"/ja/2.1/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=\"/ja/2.1/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=\"/ja/2.1/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=\"/ja/2.1/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=\"/ja/2.1/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>SMTP バックエンドは、Django によって継承されるデフォルトの構成です。明示的に指定したい場合は、設定内で以下の通り記述してください:</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>指定しなかった場合は、デフォルトの <code class=\"docutils literal notranslate\">timeout</code> は <a class=\"reference external\" href=\"https://docs.python.org/3/library/socket.html#socket.getdefaulttimeout\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\">socket.getdefaulttimeout()</code></a> によって指定されたものになり、デフォルトは <code class=\"docutils literal notranslate\">None</code> (タイムアウトなし) になります。</p>\n</dd></dl>\n\n</section>\n<section id=\"console-backend\">\n<span id=\"topic-email-console-backend\"></span><h4>コンソールバックエンド<a class=\"heading-anchor\" href=\"#console-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>実際のメールを送信する代わりに、コンソールバックエンドは単に標準出力に送信されるメールを書き込みます。 デフォルトでは、コンソールバックエンドは <code class=\"docutils literal notranslate\">stdout</code> に書き込みます。 接続を構築するときに <code class=\"docutils literal notranslate\">stream</code> キーワード引数を指定することで、別のストリーム的なオブジェクトを使用できます。</p>\n<p>このバックエンドを指定するには、設定内に以下の通り記述してください:</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>このバックエンドはプロダクトでの使用を想定していません -- 開発中の利便性のために提供されています。</p>\n</section>\n<section id=\"file-backend\">\n<span id=\"topic-email-file-backend\"></span><h4>ファイルバックエンド<a class=\"heading-anchor\" href=\"#file-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>ファイルバックエンドは、メールをファイルに書き込みます。新しいファイルは、このバックエンド上で開いたそれぞれの新しいセッションに対して作成されます。ファイルが書き込まれるディレクトリは、 <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> で 接続を生成したときに <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_FILE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_FILE_PATH</code></a> 設定ないし <code class=\"docutils literal notranslate\">file_path</code> キーワードから取得されます。</p>\n<p>このバックエンドを指定するには、設定内に以下の通り記述してください:</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>このバックエンドはプロダクトでの使用を想定していません -- 開発中の利便性のために提供されています。</p>\n</section>\n<section id=\"in-memory-backend\">\n<span id=\"topic-email-memory-backend\"></span><h4>インメモリーバックエンド<a class=\"heading-anchor\" href=\"#in-memory-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\">'locmem'</code> バックエンドは、 <code class=\"docutils literal notranslate\">django.core.mail</code> モジュールの特別な属性内にメッセージを保持します。<code class=\"docutils literal notranslate\">outbox</code> 属性は最初のメッセージが送信されるときに生成されます。送信される書くメッセージに対する <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>このバックエンドを指定するには、設定内に以下の通り記述してください:</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>このバックエンドはプロダクトでの使用を想定していません -- 開発とテストにおける利便性のために提供されています。</p>\n</section>\n<section id=\"dummy-backend\">\n<span id=\"topic-email-dummy-backend\"></span><h4>ダミーバックエンド<a class=\"heading-anchor\" href=\"#dummy-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>名前が示すように、ダミーバックエンドはメッセージに何もしません。このバックエンドを指定するには、設定内に以下の通り記述してください:</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>このバックエンドはプロダクトでの使用を想定していません -- 開発中の利便性のために提供されています。</p>\n</section>\n</section>\n<section id=\"defining-a-custom-email-backend\">\n<span id=\"topic-custom-email-backend\"></span><h3>独自のメールバックエンドを定義する<a class=\"heading-anchor\" href=\"#defining-a-custom-email-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>メール送信の方法を変更する必要がある場合、独自のメールバックエンドを記述することができます。設定ファイル内の <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_BACKEND</code></a> 設定が独自のバックエンドのクラスへの Python のインポートパスとなります。</p>\n<p>独自のメールバックエンドは、<code class=\"docutils literal notranslate\">django.core.mail.backends.base</code> にある <code class=\"docutils literal notranslate\">BaseEmailBackend</code> をサブクラス化して作ります。独自のメールバックエンドには <code class=\"docutils literal notranslate\">send_messages(email_messages)</code> メソッドを実装する必要があります。このメソッドは <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\">open()</code> メソッドと <code class=\"docutils literal notranslate\">close()</code> メソッドも実装する必要があります。実装のリファレンスについては <code class=\"docutils literal notranslate\">smtp.EmailBackend</code> を参照してください。</p>\n</section>\n<section id=\"sending-multiple-emails\">\n<span id=\"topics-sending-multiple-emails\"></span><h3>複数のメールを送信する<a class=\"heading-anchor\" href=\"#sending-multiple-emails\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>SMTP 接続 (またはその他のネットワーク接続) の確立とクローズは、負荷の高い処理です。 送信するメールがたくさんある場合は、メールを送信するたびに接続の生成と破棄を繰り返すのではなく、SMTP 接続を再利用する方が効率的です。</p>\n<p>メールバックエンドに接続を再利用するよう通知するには、2 つの方法があります。</p>\n<p>1つ目は、<code class=\"docutils literal notranslate\">send_messages()</code> メソッドを使う方法です。<code class=\"docutils literal notranslate\">send_messages()</code> は <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>例えば、定期的なメール送信を表す <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\">get_notification_email()</code> と呼ばれる関数がある場合、send_messages を 1度呼び出すだけでこれらのメールを送信することができます:</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>この例では、<code class=\"docutils literal notranslate\">send_messages()</code> を呼び出してバックエンドの接続を開き、メッセージのリストを送信した後、再び接続を閉じています。</p>\n<p>2つ目のアプローチは、メールバックエンドの <code class=\"docutils literal notranslate\">open()</code> メソッドと <code class=\"docutils literal notranslate\">close()</code> メソッドを使って手動で接続をコントロールする方法です。<code class=\"docutils literal notranslate\">send_messages()</code> は、すでに接続が開いている場合、自動で接続を開いたり閉じたりはしません。手動で接続を開いた場合、閉じるタイミングを自分でコントロールできます。たとえば、次のように書くことができます。</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>開発用にメールを設定する<a class=\"heading-anchor\" href=\"#configuring-email-for-development\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django に電子メールをまったく送信させたくない場合もあるでしょう。たとえば、ウェブサイトの開発中に数千通のメールを送信したくはないでしょう。しかし、適切な条件で適切な人々にメールが送信され、これらのメールが正しい内容を含んでいるか検証したいことがあるかもしれません。</p>\n<p>ローカル開発用にメールを設定する最も簡単な方法は、<a class=\"reference internal\" href=\"#topic-email-console-backend\"><span class=\"std std-ref\">コンソール</span></a> メールバックエンドを使うことです。このバックエンドは全てのメールを stdout にリダイレクトし、メールの内容を調べます。</p>\n<p><a class=\"reference internal\" href=\"#topic-email-file-backend\"><span class=\"std std-ref\">ファイル</span></a> メールバックエンドも開発に役立ちます -- このバックエンドは全ての SMTP 接続をファイルにダンプし、都合の良いときに調べられるようにします。</p>\n<p>もう 1 つのアプローチは、&quot;dumb&quot; SMTP サーバを使うことです。これは、メールをローカルで受け取りターミナルに表示しますが、実際には何も送信しません。Python には、単一のコマンドでこれを実行するビルトインの方法があります。</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>このコマンドは、localhost の ポート 1025 でリッスンするシンプルな SMTP サーバを開始します。このサーバは、単にすべてのメールヘッダーと E メール本文を標準出力に出力します。 <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_HOST\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_HOST</code></a> と <a class=\"reference internal\" href=\"/ja/2.1/ref/settings/#std-setting-EMAIL_PORT\"><code class=\"xref std std-setting docutils literal notranslate\">EMAIL_PORT</code></a> をそれに応じて設定するだけで済みます。 SMTP サーバのオプションの詳細については、<a class=\"reference external\" href=\"https://docs.python.org/3/library/smtpd.html#module-smtpd\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">smtpd</code></a> モジュールの Python ドキュメントを参照してください。</p>\n<p>アプリケーションでのメール送信のユニットテストについては、テストのドキュメントの <a class=\"reference internal\" href=\"/ja/2.1/topics/testing/tools/#topics-testing-email\"><span class=\"std std-ref\">Email services</span></a> セクションを参照してください。</p>\n</section>","rootId":"module-django.core.mail","toc":[{"title":"簡単な例","anchor":"quick-example","children":[]},{"title":"send_mail()","anchor":"send-mail","children":[]},{"title":"send_mass_mail()","anchor":"send-mass-mail","children":[{"title":"send_mass_mail() と 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":"例","anchor":"examples","children":[]},{"title":"ヘッダインジェクションを防止する","anchor":"preventing-header-injection","children":[]},{"title":"EmailMessage クラス","anchor":"the-emailmessage-class","children":[{"title":"EmailMessage オブジェクト","anchor":"emailmessage-objects","children":[{"title":"代替のコンテンツタイプを送信する","anchor":"sending-alternative-content-types","children":[]}]}]},{"title":"メールのバックエンド","anchor":"email-backends","children":[{"title":"メールバックエンドのインスタンスを取得する","anchor":"obtaining-an-instance-of-an-email-backend","children":[{"title":"SMTP バックエンド","anchor":"smtp-backend","children":[]},{"title":"コンソールバックエンド","anchor":"console-backend","children":[]},{"title":"ファイルバックエンド","anchor":"file-backend","children":[]},{"title":"インメモリーバックエンド","anchor":"in-memory-backend","children":[]},{"title":"ダミーバックエンド","anchor":"dummy-backend","children":[]}]},{"title":"独自のメールバックエンドを定義する","anchor":"defining-a-custom-email-backend","children":[]},{"title":"複数のメールを送信する","anchor":"sending-multiple-emails","children":[]}]},{"title":"開発用にメールを設定する","anchor":"configuring-email-for-development","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/2.1/topics/"}],"prev":{"docname":"topics/signing","title":"暗号署名","url":"/ja/2.1/topics/signing/"},"next":{"docname":"topics/i18n/index","title":"国際化とローカル化","url":"/ja/2.1/topics/i18n/"},"formats":{"html":"/ja/2.1/topics/email/","markdown":"/ja/2.1/topics/email.md","json":"/ja/2.1/topics/email.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/topics/email.txt","official":"https://docs.djangoproject.com/ja/2.1/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"]}