djangoのdjango.core.mail を再利用して、単体で動くdjangomailパッケージを作ってみた
発端 : pythonでmail関連のコード書いてたら、マルチパートとかめんどくさくなってきて、こんなん書いてたら、ぱねえ と思ったから、定評あるDjangoのmailコードから必要な部分を拝借してきた。
というわけでレッツ!!3分クッキング。
チャラ、チャッチャッチャ〜♪ チャラ、チャッチャッチャ〜♪
チャラ、チャッチャッチャ〜♪ チャララララ〜〜〜♪
献立材料
以下のコードを落としてきます
- /django/trunk/django/core/mail.py - Django - Trac
- /django/trunk/django/utils/__init__.py - Django - Trac
- /django/trunk/django/utils/encoding.py - Django - Trac
- /django/trunk/django/utils/functional.py - Django - Trac
- /django/trunk/django/conf/__init__.py - Django - Trac
それぞれ、以下のように保存します
このままだとdjangoのパスで書かれているのでエラーが出て使えないので、一部パスを変更します
djangoMail/
|
|-- conf
| |-- __init__.py
|
|-- mail.py
|
`-- utils
|-- __init__.py
|-- encoding.py
`-- functional.py
mail.pyの18行目と19行目を変更
# from django.conf import settings # from django.utils.encoding import smart_str, force_unicode from conf import settings from utils.encoding import smart_str, force_unicode
encoding.pyの4行目を変更
# from django.utils.functional import Promise from utils.functional import Promise
conf/__init__.pyの11行目を変更
# from django.conf import global_settings from conf import global_settings
次にdjangoMail直下に__init__.pyとconf直下にglobal_settings.pyというファイルを作成する。
中身はそれぞれ以下の通り。
__init__.py
from conf import settings settings.configure()
global_settings.py
# People who get code error notifications. # In the format (('Full Name', 'email@domain.com'), ('Full Name', 'anotheremail@domain.com')) #ADMINS = () # Default content type and charset to use for all HttpResponse objects, if a # MIME type isn't manually specified. These are used to construct the # Content-Type header. DEFAULT_CHARSET = 'utf-8' # E-mail address that error messages come from. SERVER_EMAIL = 'root@localhost' # Whether to send broken-link e-mails. # SEND_BROKEN_LINK_EMAILS = False # Host for sending e-mail. EMAIL_HOST = 'localhost' # Port for sending e-mail. EMAIL_PORT = 25 # Optional SMTP authentication information for EMAIL_HOST. EMAIL_HOST_USER = '' EMAIL_HOST_PASSWORD = '' EMAIL_USE_TLS = False # Default e-mail address to use for various automated correspondence from # the site managers. DEFAULT_FROM_EMAIL = 'webmaster@localhost' # Subject-line prefix for email messages send with django.core.mail.mail_admins # or ...mail_managers. Make sure to include the trailing space. #EMAIL_SUBJECT_PREFIX = '[Django] '
まあ、重要なのはglobal_settings.pyのほうですね。
設定の意味はこの辺を参考に。。。
これで、 EMAIL_HOST および EMAIL_PORT 設定で指定した SMTP ホストを介してメールを送信します。 EMAIL_HOST_USER および EMAIL_HOST_PASSWORD を指定していれば、 SMTP サーバの認証に使います。また、SMTP サーバとの接続に TLS を使うかどうかを EMAIL_USE_TLS で設定できます。
Django v1.0 documentation
django.core.mail で送信される電子メールの文字セットは DEFAULT_CHARSET 設定の値に設定されます。
最終的には以下のようなディレクトリ構成になってる
djangoMail/ |-- __init__.py |-- conf | |-- __init__.py | `-- global_settings.py | |-- mail.py `-- utils |-- __init__.py |-- encoding.py |-- functional.py
これで一応完成。
というわけでテストしてみます。
testDjangoMail.py
#!/usr/bin/env python # -*- coding: utf-8 -*- from djangoMail.mail import send_mail if __name__ == '__main__': send_mail('Subject here', 'Here is the message.', 'from@example.jp', ['to@example.jp'] , fail_silently=False ) pass
日本語を含む場合だとこのようにします。
testDjangoMailJP.py
#!/usr/bin/env python # -*- coding: utf-8 -*- from djangoMail.mail import send_mail from djangoMail.mail import EmailMessage if __name__ == '__main__': email = EmailMessage( u'件名はこんにちは', u'これは本文ですよ', u'わたしです<iam@example.jp>', ['親愛なるあなたへ<you@example.jp>'], email.send() pass
メールが着ていれば、ばっちり!!
Djangoから取ってきて改変するのがメンドイ人のためにファイル置いておきます。
djangomail - Google Code