python - 如何通过电子邮件将保存的 Blob 作为附件发送?
问题描述
我通过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
解决方案
只需这样做:
msg.attach(MIMEText(file.read())) ^ 删除(文件名)
由于文件已经被定义为文件:
file = default_storage.open(file_name)
推荐阅读
- python-3.x - 根据条件计算 pandas 数据框中的 sumproduct(Excel)
- javascript - Angular 9 - Select 中的嵌套和分组选项
- python-3.x - 非二值图像的有效轮廓
- java - 如何在 Android 中实现自定义文本编码?
- java - 有没有办法向 Quarkus 注册 Hibernate Interceptor?
- elasticsearch - 带有 AND 运算符的 Elasticsearch 多匹配查询,用于 Hyphenation_decompounder 令牌过滤器生成的令牌
- java - Java程序编译错误:“int无法转换为Toolbar”
- javascript - 在浏览器文件中使用 import 或 require
- html - CSS 加载器到中心
- javascript - Selenium C# 如何在 JavaScriptExecutor 中使用变量