Django-電子メールの送信

Djangoには、電子メールを送信するための、すぐに使用できる使いやすいライトエンジンが付属しています。Pythonと同様に、smtplibをインポートする必要があります。Djangoでは、django.core.mailをインポートするだけです。電子メールの送信を開始するには、プロジェクトのsettings.pyファイルを編集し、次のオプションを設定します-

  • EMAIL_HOST −SMTPサーバー。

  • EMAIL_HOST_USER −SMTPサーバーのログイン資格情報。

  • EMAIL_HOST_PASSWORD −SMTPサーバーのパスワード資格情報。

  • EMAIL_PORT −SMTPサーバーポート。

  • EMAIL_USE_TLS or _SSL −安全な接続の場合はtrue。

簡単なメールの送信

簡単な電子メールを送信するための「sendSimpleEmail」ビューを作成しましょう。

from django.core.mail import send_mail
from django.http import HttpResponse

def sendSimpleEmail(request,emailto):
   res = send_mail("hello paul", "comment tu vas?", "[email protected]", [emailto])
   return HttpResponse('%s'%res)

send_mail −のパラメータの詳細は次のとおりです。

  • subject −電子メールの件名。

  • message −電子メールの本文。

  • from_email −からの電子メール。

  • recipient_list −受信者の電子メールアドレスのリスト。

  • fail_silently −ブール値。falseの場合、send_mailはエラーの場合に例外を発生させます。

  • auth_user −settings.pyで設定されていない場合のユーザーログイン。

  • auth_password −settings.pyで設定されていない場合のユーザーパスワード。

  • connection −電子メールバックエンド。

  • html_message −(Django 1.7の新機能)存在する場合、電子メールはマルチパート/代替になります。

ビューにアクセスするためのURLを作成しましょう-

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^simpleemail/(?P<emailto>
   [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
   'sendSimpleEmail' , name = 'sendSimpleEmail'),)

したがって、/ myapp / simpleemail / polo @ gmail.comにアクセスすると、次のページが表示されます-

send_mass_mailで複数のメールを送信する

このメソッドは、正常に配信されたメッセージの数を返します。これはsend_mailと同じですが、追加のパラメーターを取ります。datatupleの場合、sendMassEmailビューは次のようになります。

from django.core.mail import send_mass_mail
from django.http import HttpResponse

def sendMassEmail(request,emailto):
   msg1 = ('subject 1', 'message 1', '[email protected]', [emailto1])
   msg2 = ('subject 2', 'message 2', '[email protected]', [emailto2])
   res = send_mass_mail((msg1, msg2), fail_silently = False)
   return HttpResponse('%s'%res)

ビューにアクセスするためのURLを作成しましょう-

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^massEmail/(?P<emailto1>
   [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/(?P<emailto2>
   [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})', 'sendMassEmail' , name = 'sendMassEmail'),)

/myapp/massemail/[email protected]/[email protected]/にアクセスすると、次のようになります。

send_mass_mailパラメータの詳細は次のとおりです。

  • datatuples −各要素が(subject、message、from_email、recipient_list)のようなタプル。

  • fail_silently −ブール値。falseの場合、send_mailはエラーの場合に例外を発生させます。

  • auth_user −settings.pyで設定されていない場合のユーザーログイン。

  • auth_password −settings.pyで設定されていない場合のユーザーパスワード。

  • connection −電子メールバックエンド。

上の画像でわかるように、2つのメッセージが正常に送信されました。

Note −この例では、Python smtp debugserverを使用しています。これは、−を使用して起動できます。

$python -m smtpd -n -c DebuggingServer localhost:1025

これは、送信されたすべての電子メールがstdoutに出力され、ダミーサーバーがlocalhost:1025で実行されていることを意味します。

Sending e-mails to admins and managers using mail_admins and mail_managers methods

これらのメソッドは、settings.pyファイルのADMINSオプションで定義されているサイト管理者と、settings.pyファイルのMANAGERSオプションで定義されているサイト管理者に電子メールを送信します。ADMINSオプションとMANAGERSオプションが次のようになっていると仮定します-

ADMINS =(( 'polo'、 '[email protected]')、)

MANAGERS =(( 'popoli'、 '[email protected]')、)

from django.core.mail import mail_admins
from django.http import HttpResponse

def sendAdminsEmail(request):
   res = mail_admins('my subject', 'site is going down.')
   return HttpResponse('%s'%res)

上記のコードは、ADMINSセクションで定義されたすべての管理者に電子メールを送信します。

from django.core.mail import mail_managers
from django.http import HttpResponse

def sendManagersEmail(request):
   res = mail_managers('my subject 2', 'Change date on the site.')
   return HttpResponse('%s'%res)

上記のコードは、MANAGERSセクションで定義されたすべてのマネージャーに電子メールを送信します。

パラメータの詳細-

  • Subject −電子メールの件名。

  • message −電子メールの本文。

  • fail_silently −ブール値。falseの場合、send_mailはエラーの場合に例外を発生させます。

  • connection −電子メールバックエンド。

  • html_message −(Django 1.7の新機能)存在する場合、電子メールはマルチパート/代替になります。

HTMLメールの送信

Django> = 1.7でHTMLメッセージを送信するのは-と同じくらい簡単です

from django.core.mail import send_mail

from django.http import HttpResponse
   res = send_mail("hello paul", "comment tu vas?", "[email protected]", 
         ["[email protected]"], html_message=")

これにより、マルチパート/代替の電子メールが作成されます。

ただし、Django <1.7の場合、HTMLメッセージの送信はdjango.core.mail.EmailMessageクラスを介して行われ、オブジェクトで「send」を呼び出します-

HTML電子メールを送信するための「sendHTMLEmail」ビューを作成しましょう。

from django.core.mail import EmailMessage
from django.http import HttpResponse

def sendHTMLEmail(request , emailto):
   html_content = "<strong>Comment tu vas?</strong>"
   email = EmailMessage("my subject", html_content, "[email protected]", [emailto])
   email.content_subtype = "html"
   res = email.send()
   return HttpResponse('%s'%res)

EmailMessageクラス作成のパラメーターの詳細-

  • Subject −電子メールの件名。

  • message −HTML形式の電子メール本文。

  • from_email −からの電子メール。

  • to −受信者の電子メールアドレスのリスト。

  • bcc −「Bcc」受信者の電子メールアドレスのリスト。

  • connection −電子メールバックエンド。

ビューにアクセスするためのURLを作成しましょう-

from django.conf.urls import patterns, url

urlpatterns = paterns('myapp.views', url(r'^htmlemail/(?P<emailto>
   [\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/', 
   'sendHTMLEmail' , name = 'sendHTMLEmail'),)

/myapp/htmlemail/[email protected]にアクセスすると、次のようになります。

添付ファイル付きの電子メールの送信

これは、EmailMessageオブジェクトの「attach」メソッドを使用して実行されます。

添付ファイル付きのメールを送信するビューは次のようになります-

from django.core.mail import EmailMessage
from django.http import HttpResponse

def sendEmailWithAttach(request, emailto):
   html_content = "Comment tu vas?"
   email = EmailMessage("my subject", html_content, "[email protected]", emailto])
   email.content_subtype = "html"
   
   fd = open('manage.py', 'r')
   email.attach('manage.py', fd.read(), 'text/plain')
   
   res = email.send()
   return HttpResponse('%s'%res)

アタッチ引数の詳細-

  • filename −添付するファイルの名前。

  • content −添付するファイルの内容。

  • mimetype −添付ファイルのコンテンツmimeタイプ。