はじめに
現在完全プライベートでmBaaS的なやつを作っていて万人向けのOSSになるんだったらアカウント等々のことも考えなければと思ってメールを送るようにしました。
環境
- Python 2.7.11
- Virtualenv
- Django 1.9.1
- OSX 10.11.6
PyAPNsがPython2.xにしか対応していないのでどこぞの小学生に叩かれるの承知でPython2を使って実装しました。Python3.xでもそのまま使えると思うので気が向いたらどうぞ
未だにDjango 1.10に対応できていない私です。許してください
準備
Virtualenvで仮想環境が整っている
$ pip install django==1.9.1
$ django-admin.py startproject sampleproject
$ django-admin.py startapp send_mail
ソースコード
とりあえず settings.py
をこんな感じに設定
# coding: utf-8
・・・
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'send_mail', # 追加
]
・・・
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
・・・
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your.address@gmail.com'
EMAIL_HOST_PASSWORD = 'passowrd'
EMAIL_PORT = 587
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# coding: utf-8
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('send_mail.urls', namespace = 'send_mail')),
]
自分的にアプリごとにルーティングはしたいのでこんな感じに。
# coding: utf-8
from django.core.mail import EmailMessage
from django.http import HttpResponse
def index(request):
EmailMessage(u'件名', u'本文', to = ['hoge@example.com', 'foo@example.com']).send()
return HttpResponse('Send your register email')
send_mail
直下に urls.py
を作成
from django.conf.urls import url
from accounts import views
urlpatterns = [
url(r'^$', views.index, name = 'index'),
]
ソースコード自体はこんな感じ。これで
$ python manage.py migrate
$ python manage.py runserver
をして、 http://127.0.0.1:8000
にアクセスすると本当だったらできるんだが、GoogleのAuthenticateの仕様上ちょっとややこしいことになっておらせられる
Google側の設定
- まずは使用するアカウントでログインをしておこう!
- アカウントという青いボタンを押す
- 以下のようなページになるので ログインとセキュリティ をクリック
- 下の方にいくと 安全性の低いアプリの許可 という項目があるので、デフォルトでオフになっている場合はオンにしておく。以下の画像のようになると使用できるようになる
実際にやってみよう
私の場合はログインパスワードを忘れた人のためにメールを送りつけたかったのでこんな感じのメール内容になっています。
Twitterのツイートをスクショを撮ってそのまま貼り付けるという暴挙
おまけ
パスワードリセットのためランダムに文字列を作成する
import random, string
print(''.join([random.choice(string.letters + string.digits) for i in xrange(10)]))
import random, string
print(''.join([random.choice(string.ascii_letters + string.digits) for i in range(10)]))
とっても簡単ですね!