Saltar al contenido

¿Cómo enviar por correo electrónico un campo de archivo de Django como archivo adjunto?

Siéntete libre de divulgar nuestra página y códigos con otro, ayúdanos a hacer crecer esta comunidad.

Solución:

Adjuntar un archivo models.FileField a un mensaje de correo electrónico es agradable y simple en Django:

from django.core.mail import EmailMultiAlternatives
kwargs = dict(
    to=to,
    from_email=from_addr,
    subject=subject,
    body=text_content,
    alternatives=((html_content, 'text/html'),)
)
message = EmailMultiAlternatives(**kwargs)
message.attach_file(model_instance.filefield.path)
message.send()

Otro enfoque:

from django.core.mail.message import EmailMessage

msg = EmailMessage(subject=my_subject, body=my_email_body, 
      from_email=settings.DEFAULT_FROM_EMAIL, to=[to_addressed])
msg.attach_file(self.my_filefield.path) # self.my_filefield.file for Django < 1.7
msg.send(fail_silently=not(settings.DEBUG))

Estoy usando django-almacenamiento y así .path plantea

NotImplementedError: This backend doesn't support absolute paths.

Para evitar esto, simplemente abro el archivo, lo leo, adivino el tipo MIME y lo cierro luego, pero teniendo que usar .attach en lugar de .attach_file magia.

from mimetypes import guess_type
from os.path import basename


f = model.filefield
f.open()
# msg.attach(filename, content, mimetype)
msg.attach(basename(f.name), f.read(), guess_type(f.name)[0])
f.close()

Aquí tienes las reseñas y calificaciones

Si aceptas, eres capaz de dejar un enunciado acerca de qué te ha gustado de este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *