djangoでhtml形式のメールを送信してみる
djangoでhtml形式のメールを送信してみる
参考:
・DjangoでHTMLメールを送信する
・djangoでメールを送信する
階層
.
└── django_project
├── config
│ ├── settings.py
│ └── urls.py
├── manage.py
├── myapp
│ ├── urls.py
│ └── views.py
└── templates
└── mail
├── sample.html
└── sample.txt
プログラム
【メールの設定】
settings.pyに下記を追記します。
詳細は「参考」に記載してあります。
# config/settings.py
# コンソールに表示する場合は下記の通り
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# 実際にメールを送信する場合は下記の通り
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 送信元のアドレスを指定
DEFAULT_FROM_EMAIL = 'your_mail_address@gmail.com'
# gmailの場合固定
EMAIL_HOST = 'smtp.gmail.com'
# gmailの場合固定
EMAIL_PORT = 587
# あなたのgmailメールアドレス
EMAIL_HOST_USER = 'your_mail_address@gmail.com'
# あなたのgmailのパスワード又はアプリ用パスワード
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxxxxx'
# 暗号化するのでTrue
EMAIL_USE_TLS = True
【ルーティング】
# config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
]
# myapp/urls.py
from django.urls import path
from . import views
app_name = 'myapp'
urlpatterns = [
path('notify/', views.notify, name='notify'),
]
【ビュー】
render_to_string() - テンプレートファイルを取得しています。
context - html内に埋め込みたい値をに格納しています。
html_message - メールの内容にHTMLを指定しています。
from django.template.loader import render_to_string
from django.core.mail import send_mail
from django.shortcuts import render
def notify(request):
context = {
'name': 'John',
'age':'20',
'comment':'おめでとう',
}
subject = "subject"
message = render_to_string('mail/sample.txt', context)
from_email = "your_mail_address@gmail.com"
recipient_list = [
"recipient_mail_address@gmail.com"
]
html_message = render_to_string('mail/sample.html', context)
send_mail(subject, message, from_email, recipient_list, html_message=html_message)
return render(request, 'myapp/index.html')
【HTML】
<!--templates/mail/sample.html-->
<html>
<body>
<div style="color: #FF0000;">こんにちは{{ name }}さん。</div>
<div style="color: #0000FF;">{{ age }}の誕生日、</div>
<div style="color: #008000;">{{ comment }}。</div>
</body>
</html>
結果
きちんとHTMLが利いているっぽいですね。
ディスカッション
コメント一覧
まだ、コメントがありません