I have an application whereby a user can contact me by filling out a form and in the form the user just has to fill in his details and his email and subject.
The code throws no error but I could not receive the mail after setting up everything, but the contact details gets stored in the database as I want it to be stored.
Below is my code.
Models.py
class Contact(models.Model):
name = models.CharField(max_length=100)
message = models.TextField()
sender = models.EmailField()
phone = models.CharField(max_length=10)
cc_myself = models.BooleanField(blank=True)
time = models.DateTimeField(auto_now_add=True, db_index=True)
def __str__(self):
return 'Message for {}'.format(self.sender)
Forms.py
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
fields = ['name', 'sender', 'phone', 'message', 'cc_myself']
Views.py
def contact(request):
if request.method == 'POST':
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = contact_form.cleaned_data['name']
message = contact_form.cleaned_data['message']
sender = contact_form.cleaned_data['sender']
phone = contact_form.cleaned_data['phone']
cc_myself = contact_form.cleaned_data['cc_myself']
recipients = ['[email protected]']
if cc_myself:
recipients.append(sender)
send_mail(name, message, sender, recipients)
contact_form.save()
messages.success(request, 'Message sent successfully')
return redirect('contact:contact')
else:
messages.error(request, 'Error sending your Message')
else:
contact_form = ContactForm(request.POST)
context = {
"contact_form": contact_form,
}
template = 'contact.html'
return render(request, template, context)
gmail server
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'xxxx'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
terminal output
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Subject: adie Ugbe
From: [email protected]
To: [email protected]
Date: Sun, 07 Jan 2018 11:11:10 -0000
Message-ID: <[email protected]>
oh oh no ooo dddddddd se skan
-------------------------------------------------------------------------------
Successful
When I am configured it. It sends me email successfully. I have done the code please see it. Visit the link for code: https://www.dropbox.com/s/1ouq5mklq5t51su/mail.zip?dl=0
settings.py:
INSTALLED_APPS = [
'user',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
STATIC_URL = '/static/'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'xxxxxxx'
EMAIL_PORT = '587'
EMAIL_USE_TLS = True
views.py:
from django.shortcuts import render,redirect
from user.models import *
from django.core.mail import send_mail
from user.forms import *
def contact(request):
if request.method == 'POST':
contact_form = ContactForm(request.POST)
if contact_form.is_valid():
name = contact_form.cleaned_data['name']
message = contact_form.cleaned_data['message']
sender = contact_form.cleaned_data['sender']
phone = contact_form.cleaned_data['phone']
cc_myself = contact_form.cleaned_data['cc_myself']
recipients = ['[email protected]']
if cc_myself:
recipients.append(sender)
send_mail(name, message, sender, recipients)
contact_form.save()
print('Successful')
return redirect('contact')
else:
print('Fails')
else:
contact_form = ContactForm(request.POST)
context = {
"contact_form": contact_form,
}
template = 'contact.html'
return render(request, template, context)
models.py:
from django.db import models
class Contact(models.Model):
name = models.CharField(max_length=100)
message = models.TextField()
sender = models.EmailField()
phone = models.CharField(max_length=10)
cc_myself = models.BooleanField(blank=True)
time = models.DateTimeField(auto_now_add=True, db_index=True)
def __str__(self):
return 'Message for {}'.format(self.sender)
contact.html:
<form method="post">
{% csrf_token %}
{{contact_form.as_p}}
<input type="submit" name="" value="submit">
</form>