Beim Senden einer E-Mail mit einem CSV-Anhang in Python Als ich es an Windows schickte, wurde es zu "untitled document.txt" und ich war süchtig danach. Machen Sie sich also eine Notiz.
from email.mime.text import MIMEText
from django.core.mail import EmailMessage
filename = 'test.csv'
encoding = 'cp932'
contents = create_csv() #Erstellen Sie hier eine CSV-Datei
contents = contents.encode(encoding, 'ignore') #Konvertieren Sie vom Python3-Unicode-Typ in den Str-Typ
csv_file = MIMEText(
contents,
'csv',
encoding,
)
csv_file.set_param('name', filename) #Ausblick Unterstützung
csv_file.add_header('Content-Disposition', 'attachment',
filename=('iso2022-jp', '', filename))
email = EmailMessage(
'E-Mail-Titel',
'den Inhalt der E-Mail\n',
to=['[email protected]'],
attachments=(csv_file,),
)
email.send()
Der angehängte Dateiteil der tatsächlich gesendeten E-Mail lautet wie folgt.
--===============3879210183231680079==
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: text/csv; charset="cp932"; name="test.csv"
Content-Disposition: attachment; filename*=iso2022-jp''test.csv
Dateiinhalt
--===============3879210183231680079==--
EmailMessage ist eine von django bereitgestellte Versandmethode. Fügen Sie die Dateien hinzu, die Sie mit Anhängen anhängen möchten.
Da der MIMEType der angehängten Datei "text / csv" ist, verwenden Sie "email.mine.text.MIMEText". Der Dateiname wird durch "Content-Disposition" angegeben. Dies ist in Ordnung für Mail und Google Mail auf dem Mac, aber Outlook betrachtet diesen Header nicht.
Der Name = "test.csv" am Ende von "Content-Type" ist wichtig, und Outlook scheint den Dateinamen so anzuzeigen.
Bei japanischen Dateien scheint es notwendig zu sein, den Namen mit base64encode zu konvertieren.
Content-Type: application/applefile;
name="=?utf-8?B?5pel5pys6Kqe44Gu44OV44Kh44Kk44OrLmNzdg==?="
Recommended Posts