Edited at

Djangoで簡単にGmailでメールを送る

More than 3 years have passed since last update.


はじめに

現在完全プライベートで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 をこんな感じに設定


sampleproject/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'



sampleproject/urls.py

# 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')),
]


自分的にアプリごとにルーティングはしたいのでこんな感じに。


send_mail/views.py

# 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 を作成


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側の設定

スクリーンショット_2016-10-01_午前2_51_07.png


  1. まずは使用するアカウントでログインをしておこう!

  2. アカウントという青いボタンを押す

  3. 以下のようなページになるので ログインとセキュリティ をクリック
    スクリーンショット_2016-10-01_午前2_53_06.png

  4. 下の方にいくと 安全性の低いアプリの許可 という項目があるので、デフォルトでオフになっている場合はオンにしておく。以下の画像のようになると使用できるようになる
    スクリーンショット 2016-10-01 午前2.54.24.png


実際にやってみよう

私の場合はログインパスワードを忘れた人のためにメールを送りつけたかったのでこんな感じのメール内容になっています。

スクリーンショット 2016-10-01 午前2.57.19.png

Twitterのツイートをスクショを撮ってそのまま貼り付けるという暴挙


おまけ

パスワードリセットのためランダムに文字列を作成する


Python2.x系

import random, string

print(''.join([random.choice(string.letters + string.digits) for i in xrange(10)]))



Python3.x系

import random, string

print(''.join([random.choice(string.ascii_letters + string.digits) for i in range(10)]))


とっても簡単ですね!