В моём приложении некоторые уведомления дублируются отправкой письма на почту. К письмам прикрепляются файлы, загруженные другими пользователями и они часто бывают названы по-русски. Эмпирическим путем было вычислено, что если имя файла прописано латиницей, то все приходит нормально, а те, что имеют в названии кириллицу приходят в формате .dat.
Также интересно и то, что в почтовых ящиках в браузере файлы с русскими символами в названии могут отображаться нормально, но в Outlook то же самое письмо будет содержать битые файлы.
Вот код отправки письма:
if self.send_mail and not self.mail_was_send:
self.mail_was_send = True
msg = MIMEMultipart()
msg["Subject"] = self.short_text
msg["From"] = EMAIL_HOST_USER
msg["To"] = self.user.email
msg.attach(MIMEText(self.text))
# получаем список файлов действвия и добавляем их в сообщение
for document in documents if documents else []:
path = os.path.join(MEDIA_ROOT, document.file.path)
attachment = MIMEApplication(open(path, "rb").read(), _subtype=document.file.name.split(".")[-1],
name=document.filename)
attachment.add_header('Content-Disposition', 'attachment', filename=os.path.basename(path))
msg.attach(attachment)
s = smtplib.SMTP_SSL('smtp.yandex.ru', 465)
s.ehlo(EMAIL_HOST_USER)
s.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD)
s.sendmail(EMAIL_HOST_USER, [self.user.email], msg.as_string())
s.quit()