[PYTHON] Spécifiez le nom du fichier lors de l'envoi de courriers électroniques en pièce jointe csv

Lors de l'envoi d'un e-mail avec une pièce jointe csv en python Quand je l'ai envoyé à Windows, il est devenu «document.txt» et j'en étais accro, alors prenez note.

from email.mime.text import MIMEText
from django.core.mail import EmailMessage

filename = 'test.csv'
encoding = 'cp932'
contents = create_csv()  #Créez un fichier csv ici
contents = contents.encode(encoding, 'ignore')  #Convertir du type python3 unicode au type str
csv_file = MIMEText(
    contents,
    'csv',
    encoding,
)

csv_file.set_param('name', filename)  #support Outlook

csv_file.add_header('Content-Disposition', 'attachment',
                    filename=('iso2022-jp', '', filename))

email = EmailMessage(
    'Titre de l'e-mail',
    'le contenu de l'e-mail\n',
    to=['[email protected]'],
    attachments=(csv_file,),
)
email.send()

La partie fichier joint de l'e-mail effectivement envoyé est la suivante.

--===============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

Contenu du fichier

--===============3879210183231680079==--

EmailMessage est une méthode d'envoi fournie par django. Ajoutez les fichiers que vous souhaitez joindre avec des pièces jointes.

Puisque le MIMEType du fichier joint est text / csv, utilisez ʻemail.mine.text.MIMEText. Le nom du fichier est spécifié par Content-Disposition`. C'est bien pour le courrier et gmail sur mac, mais Outlook ne regarde pas cet en-tête.

Le name =" test.csv " à la fin de Content-Type est important, et Outlook semble afficher le nom du fichier en regardant ceci.

Dans le cas des fichiers japonais, il semble nécessaire de convertir le nom avec base64encode.

Content-Type: application/applefile;
	name="=?utf-8?B?5pel5pys6Kqe44Gu44OV44Kh44Kk44OrLmNzdg==?="

Recommended Posts

Spécifiez le nom du fichier lors de l'envoi de courriers électroniques en pièce jointe csv
Formatez le journal Git et obtenez le nom du fichier validé au format csv
Erreur d'importation: impossible d'importer le nom 'Flask' lorsque le nom de fichier est flask.py dans Flask
Gérez CSV avec l'élément que vous souhaitez analyser dans le nom du fichier
Extraire uniquement le nom du fichier à l'exclusion du répertoire dans le répertoire
Téléchargez le fichier csv créé par Google Colaboratory
Quoi! Le nom du fichier décompressé était SJIS! commander?
Lors de la lecture d'un fichier csv avec read_csv de pandas, la première colonne devient index