GrabDuck

Как отправлять электронную почту в веб-приложении на Django

:

Рассказывает yasoob008


Недавно у меня появилась необходимость создать приложение на Django, которое бы позволило пользователям оставлять адреса своей электронной почты и получать приветственное письмо в ответ. Проект получилось реализовать за несколько часов, большая часть времени ушла на тестирование пользовательского интерфейса. В этой статье я покажу, как сделать такое простое приложение на Django.

В этом руководстве мы будем использовать Gmail.

Создание проекта

Для начала создадим проект Django. Введем следующую команду в терминале:

django-admin startproject gci_email

Теперь переместимся в папку с новым проектом:

cd gci_email

Создание нового приложения

Теперь нам необходимо создать новое приложение. Запустим следующую команду, которая создаст папку send_email с несколькими файлами внутри нашего проекта:

python manage.py startapp send_email

Изменение настроек проекта

Теперь немного изменим настройки проекта. Мы добавим наше приложение и всю информацию, связанную с рассылкой писем в файл settings.py. Добавим следующие данные:

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'Your gmail email'
EMAIL_HOST_PASSWORD = 'Your gmail password'
DEFAULT_FROM_EMAIL = 'Your name'
DEFAULT_TO_EMAIL = 'Your email'

В разделе файла INSTALLED_APPS необходимо добавить следующую строку в список:

'send_email.apps.SendEmailConfig'

Теперь наш файл настроек должен содержать следующий список:

INSTALLED_APPS = [
    'send_email.apps.SendEmailConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Также добавим туда следующий код:

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Создание URL

Изменим файл urls.py в папке gci_email:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('send_email.urls')),
]

Теперь создадим файл urls.py в папке send_email и добавим туда следующий код:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^success', views.success, name='success'),
]

Добавление файлов отображения

Нам необходимо изменить файл views.py в папке send_email:

from django.shortcuts import render
from django.http import HttpResponse
import django
from django.conf import settings
from django.core.mail import send_mail


def index(request):
    return render(request, 'index.html')


def success(request):
    email = request.POST.get('email', '')
    data = """
Hello there!

I wanted to personally write an email in order to welcome you to our platform.\
 We have worked day and night to ensure that you get the best service. I hope \
that you will continue to use our service. We send out a newsletter once a \
week. Make sure that you read it. It is usually very informative.

Cheers!
~ Yasoob
    """
    send_mail('Welcome!', data, "Yasoob",
              [email], fail_silently=False)
    return render(request, 'success.html')

Добавление шаблонов

Теперь нам необходимо создать папку templates внутри send_email, а в ней 2 файла: index.html и success.html.

В файле index.html надо создать форму для ввода почты. Файл success.html не должен содержать ничего особого.

Вот и всё. Теперь мы можем создать миграции, затем применить их и запустить проект:

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

Исходный код можно посмотреть на странице автора на GitHub.

Перевод статьи «Implementing Email Sending Functionality in a Django App»