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