使用 MIMEApplication 並設置 attachment 的 header
不然如果檔名有中文的話
用 Gmail 收到的附件檔名會是 noname
def withdraw_send_email(request, pk):
withdraw = get_object_or_404(Withdraw, pk=pk)
email = '[email protected]'
subject = _(u'Packer 數位發行服務')
body = render_to_string('dps/email/withdraw_notice.html', {})
message = EmailMessage(
subject=subject,
body=body,
to=[email, ],
)
message.content_subtype = 'html'
from email.mime.application import MIMEApplication
# 檔名包含中文的話,要用這種方式 Gmail 收到的附件檔名才不會是 noname
filename = '%s 結算表.xlsx' % (withdraw.serial_number[:6].encode('utf-8'))
file_data = withdraw.file.read()
attach_file = MIMEApplication(file_data, _subtype='vnd.ms-excel')
attach_file.add_header('Content-Disposition', 'attachment; filename="%s"' % (filename))
message.attach(attach_file)
message.send()
return HttpResponse('OK')