Создание функциональной контактной формы с помощью django
Я создал сайт для своего друга. Я создал контактную форму, которую он хотел бы, чтобы люди использовали, а сообщения отправлялись непосредственно на его личный адрес электронной почты. Я не могу заставить ее работать. В настоящее время я тестирую, используя свою собственную учетную запись outlook, но в конечном итоге я хотел бы использовать его учетную запись Gmail. Любой вклад будет высоко оценен.
В итоге мне удалось заставить его работать, используя mailtrap, но, насколько я знаю, мне придется заплатить за перенаправление на адрес электронной почты по моему выбору?
Настройки:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp-mail.outlook.com'
EMAIL_HOST_USER = 'email@email.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
Contact.html
{% extends 'portfolio/main.html' %} {% block content %}
{% load crispy_forms_tags %}
<!--Section heading-->
<h2 class="h1-responsive font-weight-bold text-center my-4">
Contact vstheworld
</h2>
<!--Section description-->
<p class="text-center w-responsive mx-auto mb-5">
Do you have any questions? Please do not hesitate to contact us directly.
Our team will come back to you within a matter of hours to help you.
</p>
<!-- Wrapper container -->
<div class="container py-4">
<form method="POST">
{% csrf_token %}
{{form|crispy}}
<div class="d-grid">
<br>
<button class="btn btn-dark btn-lg" id="form-submit" type="submit">
Submit
</button>
</div>
</form>
</div>
{% endblock content %}
forms.py
from django import forms
class contactForm(forms.Form):
full_name = forms.CharField(max_length = 50)
email_address = forms.EmailField(max_length= 50)
message = forms.CharField(widget = forms.Textarea, max_length = 2000)
views.py
from django.shortcuts import render, redirect
from .forms import contactForm
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse
def vswPortfolio(request):
return render(request, 'portfolio/home.html')
def vswProject(request, pk):
return render(request, 'portfolio/project.html')
def vswContact(request):
if request.method == 'POST':
form = contactForm(request.POST)
if form.is_valid():
subject = "Website Inquiry"
body = {
'full_name': form.cleaned_data['full_name'],
'email': form.cleaned_data['email_address'],
'message':form.cleaned_data['message'],
}
message = "\n".join(body.values())
try:
send_mail(subject, message, '', ['myemail@email.com'])
except BadHeaderError:
return HttpResponse('Invalid header found.')
return redirect ('contact')
form = contactForm()
return render(request, "portfolio/contact.html", {'form':form})
урлы
from django.urls import path
from . import views
urlpatterns = [
path('', views.vswPortfolio, name='home'),
path('project/<str:pk>/', views.vswProject, name='project'),
path('contact/', views.vswContact, name='contact'),
]
Прошу прощения, если я вставил слишком много информации, я просто никогда не размещал достаточно информации в прошлом.
Тия за любую помощь
Вот как я это сделал
в settings.py +=
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST='smtp.gmail.com'
EMAIL_PORT=587
EMAIL_HOST_USER=''
EMAIL_HOST_PASSWORD=''
EMAIL_USE_TLS= True
EMAIL_HOST_USER='yourmail@gmail.com'
EMAIL_HOST_PASSWORD='passwordgeneratedforthisappingoogleaccounts'
вам нужно зайти в свой аккаунт и зарегистрировать приложение, после чего вам дадут пароль
в представлении:
from django.shortcuts import render, redirect
from django.urls import reverse
from . forms import ContactForm
from django.core.mail import EmailMessage
from django.template.loader import render_to_string
from django.conf import settings
def contact(request):
if request.method == 'GET':
form = ContactForm()
context = {
'form': form
}
return render(request, 'contact.html', context)
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
form.save()
name=request.POST['name']
email=request.POST['email']
subject=request.POST['subject']
message=request.POST['message']
template=render_to_string("email_template.html", {'name': name,
'email':email, 'subject':subject, 'message':message})
mail = EmailMessage(
subject,
template,
settings.EMAIL_HOST_USER,
['youremail@gmail.com']
)
mail.send()
return redirect(reverse('contact')+ "?ok")
и добавить в >шаблоны
email_template.html
{{message}}
{{email}}
{{name}}