2017-05-04 16 views
-3

メールの本文に投稿データを送信したいと思います。メール本文にPOSTデータを送信する - Django

私はこのようなことをしたいと思いますが、ボディー辞書は明らかに正しいフォーマットではありません(これはエラー'dict' object has no attribute 'splitlines'を返します)。これを達成するためのベストプラクティスは何ですか?ここで

from django.core.mail import EmailMessage 

def send_mail(request): 
    body = { 
     'name': request.POST['name'], 
     'phone': request.POST['phone'], 
     'email': request.POST['email'], 
     'appointment prefs': request.POST['appt'], 
     'message': request.POST['message'], 
    } 
    email = EmailMessage(
     'Website Inquiry', 
     body, 
     to=['[email protected]'] 
     ) 
    email.send() 

はエラーです:

Request Method: POST 
Request URL: http://localhost:8000/send_mail 

Django Version: 1.11 
Python Version: 2.7.10 
Installed Applications: 
['apps.cphh', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.sites', 
'smartfields'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 
File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 
    41.    response = get_response(request) 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/Users/kristaprokopczyk/Documents/pet_health_harmony/pet_health_harmony/apps/cphh/views.py" in send_mail 
    31.  email.send() 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/mail/message.py" in send 
    342.   return self.get_connection(fail_silently).send_messages([self]) 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/mail/backends/smtp.py" in send_messages 
    111.     sent = self._send(message) 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/mail/backends/smtp.py" in _send 
    125.   message = email_message.message() 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/mail/message.py" in message 
    301.   msg = SafeMIMEText(self.body, self.content_subtype, encoding) 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/mail/message.py" in __init__ 
    214.   MIMEText.__init__(self, _text, _subtype=_subtype, _charset=_charset) 

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/email/mime/text.py" in __init__ 
    30.   self.set_payload(_text, _charset) 

File "/Users/kristaprokopczyk/.virtualenvs/megan/lib/python2.7/site-packages/django/core/mail/message.py" in set_payload 
    224.     for l in payload.splitlines() 

Exception Type: AttributeError at /send_mail 
Exception Value: 'dict' object has no attribute 'splitlines' 
+1

ここで、あなたは 'splitlines'を呼び出しますか?私たちが助けるためにコードを完全に共有してください。 – ozgur

+0

私はDjangoを使用しませんが、その辞書をjsonにダンプして試すことができますか? –

+0

実際のコードを表示してください。これはコンパイルされません。あなたは '{}'の代わりに '' body''をラップして '[]'を持っています。 –

答えて

0

代わりrequest.POST.get('name')を試してみてください。

+0

まだ同じエラーが発生しています。 –

0

json.parseを使用して文字列に変換し、この文字列をメール本文に送信します。

import json 

def send_mail(request): 
    body = (........) 
    body = json.parse(body) 
    ........... 
1

問題は、メッセージの内容のための単一の文字列を望むEmailMessageに由来し、それは辞書を与えられています。

これは文字列にする必要があります。これはそれを行う必要があります。

# turn the dict into a set of strings 
content = {"%s: %s" % (key, value) for (key, value) in body.items()} 
# turn those strings into 1 block of text separated by newlines 
content = "\n".join(content) 
email = EmailMessage(
    'Website Inquiry', 
    content, 
    to=['[email protected]'] 
    ) 
+0

ありがとう、これは動作します。何らかの理由で私は単純に文字列に変換する以外の方法があると考えました。 –

関連する問題