title: Django contact form isn't sending message content
body: <p>My contact form sends emails to my gmail account but they never have any subject or message content. I'm not quite sure what to do next. If any more code is needed, please let me know.</p>
  
  <p>views.py</p>
  
  <pre><code>from django.views.generic.edit import FormView
  
  from .forms import ContactForm
  
  try:
      from django.urls import reverse
  except ImportError:  # pragma: no cover
      from django.core.urlresolvers import reverse  # pragma: no cover
  
  
  class ContactFormView(FormView):
      form_class = ContactForm
      recipient_list = None
      template_name = 'contact_form/contact_form.html'
  
      def form_valid(self, form):
          form.save()
          return super(ContactFormView, self).form_valid(form)
  
      def get_form_kwargs(self):
          # ContactForm instances require instantiation with an
          # HttpRequest.
          kwargs = super(ContactFormView, self).get_form_kwargs()
          kwargs.update({'request': self.request})
  
          # We may also have been given a recipient list when
          # instantiated.
          if self.recipient_list is not None:
              kwargs.update({'recipient_list': self.recipient_list})
          return kwargs
  
      def get_success_url(self):
  
          return reverse('contact_form_sent')
  </code></pre>
  
  <p>forms.py</p>
  
  <pre><code>from django import forms
  from django.conf import settings
  from django.contrib.sites.shortcuts import get_current_site
  from django.utils.translation import ugettext_lazy as _
  from django.core.mail import send_mail
  from django.template import loader
  
  
  class ContactForm(forms.Form):
  
      name = forms.CharField(max_length=100,
                             label=_(u'Your name'))
      email = forms.EmailField(max_length=200,
                               label=_(u'Your email address'))
      body = forms.CharField(widget=forms.Textarea,
                             label=_(u'Your message'))
  
      from_email = settings.DEFAULT_FROM_EMAIL
  
      recipient_list = [mail_tuple[1] for mail_tuple in settings.MANAGERS]
  
      subject_template_name = "contact_form/contact_form_subject.txt"
  
      template_name = 'contact_form/contact_form.txt'
  
      def __init__(self, data=None, files=None, request=None,
                   recipient_list=None, *args, **kwargs):
          if request is None:
              raise TypeError("Keyword argument 'request' must be supplied")
          self.request = request
          if recipient_list is not None:
              self.recipient_list = recipient_list
          super(ContactForm, self).__init__(data=data, files=files,
                                            *args, **kwargs)
  
      def message(self):
          """
          Render the body of the message to a string.
          """
          template_name = self.template_name() if \
              callable(self.template_name) \
              else self.template_name
          return loader.render_to_string(
              template_name, self.get_context(), request=self.request
          )
  
      def subject(self):
          """
          Render the subject of the message to a string.
          """
          template_name = self.subject_template_name() if \
              callable(self.subject_template_name) \
              else self.subject_template_name
          subject = loader.render_to_string(
              template_name, self.get_context(), request=self.request
          )
          return ''.join(subject.splitlines())
  
      def get_context(self):
          if not self.is_valid():
              raise ValueError(
                  "Cannot generate Context from invalid contact form"
              )
          return dict(self.cleaned_data, site=get_current_site(self.request))
  
      def get_message_dict(self):
  
          if not self.is_valid():
              raise ValueError(
                  "Message cannot be sent from invalid contact form"
              )
          message_dict = {}
          for message_part in ('from_email', 'message',
                               'recipient_list', 'subject'):
              attr = getattr(self, message_part)
              message_dict[message_part] = attr() if callable(attr) else attr
          return message_dict
  
      def save(self, fail_silently=False):
          """
          Build and send the email message.
          """
          send_mail(fail_silently=fail_silently, **self.get_message_dict())
  </code></pre>
  
  <p>settings.py</p>
  
  <pre><code>ALLOWED_HOSTS = ['*']
  
  MANAGERS = [('Manager', 'email@gmail.com')]
  
  SITE_ID = 1
  EMAIL_HOST = 'smtp.gmail.com'
  EMAIL_PORT = 587
  EMAIL_HOST_USER = 'email@gmail.com'
  EMAIL_HOST_PASSWORD = 'Password'
  EMAIL_USE_TLS = True
  DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
  EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
  FILE_UPLOAD_MAX_MEMORY_SIZE = 35000000
  </code></pre>
  
  <p>(Its saying that i have too much code and not enough details so i'm just pasting the top part so the error stops coming up)</p>
  
  <p>My contact form sends emails to my gmail account but they never have any subject or message content. I'm not quite sure what to do next. If any more code is needed, please let me know.</p>