Django Mail配信
出典: UeblogWiki
目次 |
Tips
GmailのSMTPを使って送信
settings.py に以下の設定をします。
EMAIL_USE_TLS = True EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'youremail@gmail.com' EMAIL_HOST_PASSWORD = 'yourpassword' EMAIL_PORT = 587
以下のコードで送信できます。
>>> from django.core.mail import EmailMessage
>>> email = EmailMessage('Hello', 'World', to = ['youremail@somewhere.com'])
>>> email.send()
今後変更になるTips
文字コードISO-2022-JPでメールの配信をする
django.core.mail.EmailMessageは
>>> from django.core.mail import EmailMessage >>> email = EmailMessage(u'日本語件名', '本文', to = ['youremail@somewhere.com']) >>> email.encoding = 'ISO-2022-JP' >>> email.send()
でISO-2022-JPでメールの送信が可能なはずですが現状のDjangoでは上手くいきません。 現在、Django-jaの方でpatchを作って報告する予定ですがそれまでは
from django.core.mail import EmailMessage, SafeMIMEText, make_msgid
from django.conf import settings
from django.utils.encoding import smart_str, force_unicode
from email.Header import Header
from email.Utils import formatdate, parseaddr, formataddr
from email.MIMEText import MIMEText
class JapaneseEmailMessage(EmailMessage):
def message(self):
encoding = 'ISO-2022-JP'
msg = MIMEText(smart_str(self.body, encoding), self.content_subtype, encoding)
if self.attachments:
body_msg = msg
msg = MIMEMultipart(_subtype=self.multipart_subtype)
if self.body:
msg.attach(body_msg)
for attachment in self.attachments:
if isinstance(attachment, MIMEBase):
msg.attach(attachment)
else:
msg.attach(self._create_attachment(*attachment))
msg['Subject'] = Header(self.subject, encoding)
msg['From'] = self.from_email
msg['To'] = ', '.join(self.to)
msg['Date'] = formatdate()
msg['Message-ID'] = make_msgid()
if self.bcc:
msg['Bcc'] = ', '.join(self.bcc)
for name, value in self.extra_headers.items():
msg[name] = value
return msg
のようなコードを作ればとりあえずは送れます。
>>> email = JapaneseEmailMessage(u'日本語件名', '本文', to = ['youremail@somewhere.com']) >>> email.send()
しかし添付ファイルは文字化けするかもしれません。
UTF-8ならばこのコードを書かないでも問題なく送れます。
参考
- HTMLメールをdjango.core.mail.pyのEmailMultiAlternativesクラスで実装
- DjangoからGmail 0.97以上
- Pythonにおけるメール配信
- yoshinoriさん 成功したようです
- Djangoへの片思い日記 - [DjangoDjangoでGmailのSMTP使って送信失敗]
