Me gustaría crear un archivo de texto en Python, escribirle algo y luego enviarlo por correo electrónico (poner test.txt como archivo adjunto de correo electrónico).
Sin embargo, no puedo guardar este archivo localmente. ¿Alguien sabe cómo hacer esto?
Tan pronto como abro el archivo de texto para escribirlo, se guarda localmente en mi computadora.
f = open("test.txt","w+") Estoy usando smtplib y MIMEMultipart para enviar el correo.
StringIO es el camino a seguir...
from email import encoders from email.mime.base import MIMEBase from email.mime.multipart import MIMEMultipart from io import StringIO email = MIMEMultipart() email['Subject'] = 'subject' email['To'] = 'recipient@example.com' email['From'] = 'sender@example.com' # Add the attachment to the message f = StringIO() # write some content to 'f' f.write("content for 'test.txt'") f.seek(0) msg = MIMEBase('application', "octet-stream") msg.set_payload(f.read()) encoders.encode_base64(msg) msg.add_header('Content-Disposition', 'attachment', filename='test.txt') email.attach(msg)Encontré esta publicación mientras averiguaba cómo hacer esto con el EmailMessage más nuevo, que se introdujo en Python 3.6 (ver https://docs.python.org/3/library/email.message.html ). Es un poco menos código:
from email.message import EmailMessage from io import StringIO from smtplib import SMTP message = EmailMessage() message['Subject'] = 'Subject' message['From'] = 'from@example.com' message['To'] = 'to@example.com' f = StringIO() f.name = 'attachment.txt' f.write('contents of file') f.seek(0) message.add_attachment(f.read(), filename=f.name) with SMTP('yourmailserver.com', 25) as server: server.send_message(message)