Почта веб-приложения Django с использованием Sendgrid или Amazon SES - Не получение писем
Большое спасибо за помощь людям в решении программных вопросов. Я разрабатываю простое веб-приложение, используя Django, и я хотел бы иметь контактную форму, чтобы пользователи могли связаться со мной для обратной связи и других тем. Эта почта будет приходить в мой Gmail для более простого общения.
Я следовал многим руководствам и обновлял settings.py, forms.py и views.py много раз, и я все еще не получал никакого письма, если я не отправлял его через cmd следующим образом:
from django.core.mail import send_mail
send_mail(
'Subject here',
'Here is the message.',
'validated email',
['validated email']
)
Я, конечно, создал учетные записи в SendGrid и Amazon SES, подтвердил электронные письма и использовал ключи.
для views.py я использовал эти два представления контактов, одно или другое, и я изменял любую их часть много раз, пытаясь получить получение электронной почты, не обращайте внимания, если есть проблемы с отступами, с Visual Studio это легко исправить, также подтвержденный email - это email, который я использовал с SES или Sendgrid
from django.shortcuts import render, redirect
from .forms import ContactForm
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect
from django.conf import settings
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
subject = "Contact"
body = {
'first_name': form.cleaned_data['first_name'],
'last_name': form.cleaned_data['last_name'],
'email': form.cleaned_data['email'],
'message':form.cleaned_data['message'],
}
message = "\n".join(body.values())
try:
send_mail(subject, message, 'validated email', ['validated email'], fail_silently=False)
except BadHeaderError: #add this
return HttpResponse('Invalid header found.')
form = ContactForm()
return render(request, 'contact.html', {'form':form})
или
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
try:
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
email = request.POST.get('email')
message = request.POST.get('message')
send_mail(first_name, last_name, email, message, 'validated email', ['validated email'], fail_silently=False)
except BadHeaderError:
return HttpResponse('Invalid header found.')
return HttpResponse('Thank you')
form = ContactForm
return render(request, 'contact.html', {'form':form})
forms.py
from django import forms
class ContactForm(forms.Form):
first_name = forms.CharField(max_length = 50)
last_name = forms.CharField(max_length = 50)
email = forms.EmailField(max_length = 150)
message = forms.CharField(widget = forms.Textarea, max_length = 2000)
Я действительно много раз манипулировал настройками для обоих компаний, выходя и добавляя код, но любое изменение, кажется, не работает.
Amazon SES settings.py
EMAIL_BACKEND = 'django_ses.SESBackend'
AWS_ACCESS_KEY_ID = '***CM7Y7'
AWS_SECRET_ACCESS_KEY = '***n8GKA+sp80cY'
AWS_SES_REGION_NAME = 'eu-west-2' #(ex: us-east-2)
AWS_SES_REGION_ENDPOINT ='email.eu-west-2.amazonaws.com' #(ex: email.us-east-2.amazonaws.com)
Sendgrid settings.py
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey' # this is exactly the value 'apikey'
SENDGRID_API_KEY = 'SG.JFR****' # this is your API key
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'sgbackend.SendGridBackend'
SENDGRID_SANDBOX_MODE_IN_DEBUG = True
SENDGRID_ECHO_TO_STDOUT = True
форма часть contact.html
<form class="border-right pr-5 mb-5" method="post" id="contactForm" name="contactForm">
{% csrf_token %}
<div class="row">
<div class="col-md-6 form-group">
<input type="text" class="form-control" name="first_name" id="first_name" placeholder="First name">
</div>
<div class="col-md-6 form-group">
<input type="text" class="form-control" name="last_name" id="last_name" placeholder="Last name">
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<input type="text" class="form-control" name="email" id="email" placeholder="Email">
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<textarea class="form-control" name="message" id="message" cols="30" rows="7" placeholder="Write your message"></textarea>
</div>
</div>
<div class="row">
<div class="col-md-12">
<input type="submit" value="Send Message" class="btn btn-primary rounded-0 py-2 px-4">
<span class="submitting"></span>
</div>
</div>
</form>
В командной строке и с помощью инструментов разработчика в chrome и firefox, все вроде бы работает, но я не получаю никаких писем в моем аккаунте Gmail не в папке спам. Я буду очень признателен, если вы сможете мне помочь, потому что я проверил множество руководств и постов, отредактировал много кода, но все еще не вижу, что это работает. Большое спасибо заранее, любое предложение будет приветствоваться.