2017-08-16 2 views
0

J'ai essayé d'envoyer des fichiers dans le courrier en utilisant Django EmailMessage classeDjango envoyez un email avec Attachement

L'attachement des fichiers que je veux envoyer sont DB, fournies par chaque utilisateur lors de l'inscription sur mon site.

I'have a essayé cela, mais il ne fonctionne pas

myapp/views.py:

from django.core.mail import EmailMessage 

def contactUber(request,id): 
    user = User.objects.get(id=id) 
    msg = EmailMessage(
     'Hello', #subject 
     'Body goes here', #content 
     '[email protected]', #from 
     ['[email protected]'] #to 
     ) 
    msg.attach_file(user.profile.id_card.url) #the file that i want to attach 
    msg.send() 
    messages.success(request, "Email envoyé avec succes") #success msg 
    return redirect(user_detail, id=str(id)) 

myapp/modèles:

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    birth_date = models.DateField(('Date de naissance'), null=True, blank=True) 
    #DOCUMENTS TO UPLOAD 
    id_card = models.FileField(('Carte Nationale d\'Identité'), upload_to='documents/CNI') 
    drive_licence = models.FileField(('Permis de conduire'), upload_to='documents/RIB') 
    uploaded_at = models.DateTimeField(('Ajouté le'), auto_now=True) 
    docs_are_checked = models.BooleanField(('Documents validés'), default=False) 

retraçage:

Traceback (most recent call last): 
    File "C:\venvs\env1\lib\site-packages\django\core\handlers\exception.py", line 41, in inner 
response = get_response(request) 
    File "C:\venvs\env1\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response 
response = self.process_exception_by_middleware(e, request) 
    File "C:\venvs\env1\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response 
response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "C:\djangoprojects\mysite\mysite\core\views.py", line 272, in contactUber 
msg.attach_file(user.profile.id_card.url) #the file that i want to attach 
    File "C:\venvs\env1\lib\site-packages\django\core\mail\message.py", line 394, in attach_file 
with open(path, 'rb') as file: 
FileNotFoundError: [Errno 2] No such file or directory: '/media/documents/CNI/1847635-2524541_FZLHlIr.jpg' 
[16/Aug/2017 12:10:27] "GET /core/send_mail_uber/16/ HTTP/1.1" 500 73307 

Ma question est: Comment résoudre ce problème

+0

et quelle est votre question? Est-ce comment réparer cela? Pourquoi cela se passe-t-il? Ou quoi? s'il vous plaît soyez clair lors de l'affichage sur SO. –

+0

@ N.Ivanov modifier –

Répondre

0

Étant donné que le fichier est stocké dans votre base de données, il ne sera probablement pas enregistré /media/documents/CNI/1847635-2524541_FZLHlIr.jpg à cet emplacement. Donc, ce que vous avez à faire est de spécifier le nom de fichier, les données, le type MIME en utilisant la méthode attach(). Voici un exemple de la façon dont il devrait fonctionner:

msg.attach(user.profile.id_card.name, user.profile.id_card.read(), user.profile.id_card.content_type) 

Vous pouvez en lire plus à Django Docs. Recherchez attach(), et de savoir qu'il est différent de attach_file()

EDIT 1

Puisque vous avez mentionné dans les commentaires que id_card renvoie une erreur, je suppose que vous n'êtes pas le bon modèle récupérez. D'après ce que je peux voir, je ne sais pas si vous le faites correctement. Vous devriez chercher l'instance de modèle Profile de la manière suivante:

someVar = Profile.objects.get(user=request.user) # assuming the current user is the one that you would like to be 

puis pour attacher l'utilisation du fichier:

msg.attach(someVar.id_card.name, someVar.id_card.read(), 'image/png') # assuming you will be attaching png's only 

Hope this helps!

+0

id_card n'est pas défini (NameError) –

+0

@VITALYSWEB J'ai mis à jour ma réponse, devrait être 'user.profile.id_card' si cela ne fonctionne pas, alors vous ne cherchez probablement pas le bon modèle. –

+0

@VITALYSWEB J'ai mis à jour ma réponse sous ** EDIT 1 **. J'espère que cela t'aides! –