Django-sending-emails

提供:Dev Guides
移動先:案内検索

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または_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?", "paul@polo.com", [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の新機能)存在する場合、電子メールはmultipart/alternativeになります。

ビューにアクセスするための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', 'polo@polo.com', [emailto1])
   msg2 = ('subject 2', 'message 2', 'polo@polo.com', [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/polo@gmail.com/sorex@gmail.com/にアクセスすると、次のようになります-

複数のメールの送信

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つのメッセージが正常に送信されました。

-この例では、Python smtp debuggingserverを使用しています。

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

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

  • mail_adminsおよびmail_managersメソッドを使用して管理者およびマネージャーに電子メールを送信する*

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

*ADMINS* =(( 'polo'、 'polo@polo.com')、)

管理者 =(( popoli '、' popoli@polo.com ')、)

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の新機能)存在する場合、電子メールはmultipart/alternativeになります。

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?", "paul@polo.com",
         ["polo@gmail.com"], html_message=")

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

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

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, "paul@polo.com", [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/polo@gmail.comにアクセスすると、次のようになります-

HTML電子メールの送信

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

これは、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, "paul@polo.com", 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タイプ。