我正在通过javascript将pdf作为blob发送给django,然后尝试将其作为电子邮件附件发送。
我的代码是:
def SendPrescriptionbyMail(request, cliniclabel, patient_id):
from django.core.files.storage import default_storage
print(request.FILES)
print(request.FILES['file'])
myform = forms.Form(request.POST, request.FILES)
file = myform.files['file']
print(file)
file_name = default_storage.save(file.name, file)
file = default_storage.open(file_name)
print(f'file_name is {file_name}')
file_url = default_storage.url(file_name)
print(f'Or maybe {file_url}')
recipient = 'joel@domain'
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()
msg['Subject'] = "Your prescription"
msg['From'] = "admin@me"
msg['To'] = recipient
msg.preamble = 'Your prescription is attached'
msg.attach(MIMEText(file(file_name).read()))
s = smtplib.SMTP('smtp.mailgun.org', 587)
s.login('myid@somewhere', 'apikey')
s.sendmail(msg['From'], msg['To'], msg.as_string())
s.quit()
return HttpResponse('Successfully sent email')
输出:
<MultiValueDict: {'file': [<TemporaryUploadedFile: blob (application/pdf)>]}>
blob
blob
file_name is blob_4VZxpHY
Or maybe /data/blob_4VZxpHY
2018-11-14 19:02:36,554 django.request ERROR Internal Server Error: /clinic/madhav/prescription/sendemail/patient/18
Traceback (most recent call last):
File "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/joel/myappointments/clinic/views.py", line 4953, in SendPrescriptionbyMail
msg.attach(MIMEText(file(file_name).read()))
TypeError: 'File' object is not callable
答案 0 :(得分:1)
只需:
msg.attach(MIMEText(file.read())) ^ removed (file_name)
因为文件已被定义为具有以下内容的文件:
file = default_storage.open(file_name)