Написать пост

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

Руководство по созданию приложения на Django, позволяющее пользователям оставлять адреса своей электронной почты и получать приветственное письмо в ответ.

Обложка поста Как отправлять электронную почту в веб-приложении на 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.

Следите за новыми постами
Следите за новыми постами по любимым темам
19К открытий19К показов