Отправка e-mail в Django
Отличная статья по настройке POSTFIX: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-on-ubuntu-16-04
Отправка e-mail в Django довольно проста. Во-первых, необходимо иметь локальный SMTP-сервер или определить конфигурацию внешнего SMTP-сервера, добавив следующие параметры в файл Settings.py проекта:
- EMAIL_HOST : The SMTP server host. По умолчанию localhost .
- EMAIL_PORT : The SMTP port по умолчанию 25.
- EMAIL_HOST_USER : Username для SMTP server.
- EMAIL_HOST_PASSWORD : Password для SMTP server.
- EMAIL_USE_TLS : Использовать ли безопасное подключение TLS.
- EMAIL_USE_SSL : Использование неявного TLS-безопасного подключения.
Если у вас нет локального SMTP-сервера, можно использовать SMTP-сервер поставщика услуг электронной почты. Приведенная ниже примерная конфигурация допустима для отправки сообщений электронной почты через серверы Gmail с использованием учетной записи Google:
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'your_password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
Выполните в консоли python manage.py
, чтобы открыть оболочку Python и отправить сообщение по электронной почте следующим образом:
>>> from django.core.mail import send_mail
>>> send_mail('Django mail', 'This e-mail was sent with Django.',
'[email protected]', ['[email protected]'], fail_silently=False)
send_mail() в качестве необходимых аргументов учитывает тему письма, сообщение, отправителя и список получателей. Установив необязательный аргумент fail_silently=False, мы сообщаем, что он вызывает исключение, если сообщение не может быть отправлено. Если отображается сообщение 1, то письмо успешно отправлено. При отправке сообщений электронной почты Gmail с предыдущей конфигурацией, возможно, потребуется включить доступ для менее защищенных приложений на https://www.google.com/settings/security/lesssecureapps
Отредактируйте представление post_share в файле views.py приложения блога:
from django.core.mail import send_mail
def post_share(request, post_id):
# Retrieve post by id
post = get_object_or_404(Post, id=post_id, status='published')
sent = False
if request.method == 'POST':
# Form was submitted
form = EmailPostForm(request.POST)
if form.is_valid():
# Form fields passed validation
cd = form.cleaned_data
post_url = request.build_absolute_uri(post.get_absolute_url())
subject = '{} ({}) recommends you reading "{}"'.format(cd['name'], cd['email'], post.title)
message = 'Read "{}" at {}\n\n{}\'s comments: {}'.format(post.title, post_url, cd['name'], cd['comments'])
send_mail(subject, message, '[email protected]',[cd['to']])
sent = True
else:
form = EmailPostForm()
return render(request, 'blog/post/share.html', {'post': post,
'form': form,
'sent': sent})
Обратите внимание, что мы объявляем переменную sent и присваиваем ей значение true, когда почта была отправлена. Мы собираемся использовать эту переменную позже в шаблоне для отображения сообщения об успешном выполнении формы. Поскольку мы должны включить ссылку на отправляемый пост в электронном сообщении, мы извлекаем абсолютный путь нему с помощью метода get_absolute_url(). Этот путь используется в качестве входных данных для request.build_absolute_uri() для построения полного URL-адреса, включая схему HTTP и имя хоста. Мы строим тему и текст сообщения с помощью валидных данных проверенной формы и, наконец, отправляем сообщение на адрес электронной почты, содержащийся в поле «Кому».
Теперь, когда представление завершено, не забудьте добавить для него новый шаблон URL-адреса. Откройте файл urls.py приложения блога и добавьте шаблон URL-адреса post_share, как показано ниже:
urlpatterns = [
# ...
url(r'^(?P<post_id>\d+)/share/$', views.post_share, name='post_share'),
]