使用Django可以轻松通过Gmail发送电子邮件

首先

我正在完全私人地开发一个类似于mBaaS的东西,如果要成为适用于所有人的开放源代码软件,我认为也需要考虑一些账户等等的事情,所以我决定发送一封邮件。

环境

    • Python 2.7.11

 

    • Virtualenv

 

    • Django 1.9.1

 

    OSX 10.11.6

由于PyAPNs只支持Python 2.x,所以我选择了Python 2来进行实现,尽管我知道我可能会被某个小学生嘲笑。我认为它也可以直接在Python 3.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'),
]

Here is an example of the source code.

$ python manage.py migrate
$ python manage.py runserver

进行, http://127.0.0.1:8000

如果要访问这个网站,其实是可以的,但是由于Google身份验证的规定,变得有些复杂。

谷歌的设定

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

让我们实际尝试一下

由于有人忘记了登录密码,所以我想发送一封类似下面的电子邮件内容。

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

在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)]))

非常容易呢!

广告
将在 10 秒后关闭
bannerAds