Джанго отправить письмо с приложением
Я пытался отправить некоторые файлы по почте, используя Django EmailMessage
учебный класс
Вложение файлов, которое я хочу отправить, находится в БД, предоставленной каждым пользователем при регистрации на моем сайте.
Я пробовал это, но это не работает
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
'vitalysweb@gmail.com', #from
['uber@uber.com'] #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 / модель:
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)
Проследить:
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
Мой вопрос: как это исправить
1 ответ
Поскольку файл хранится в вашей БД, он, вероятно, не будет сохранен /media/documents/CNI/1847635-2524541_FZLHlIr.jpg
в этом месте. Итак, что вам нужно сделать, это указать имя файла, данные, mimetype, используя attach()
метод. Вот пример того, как это должно работать:
msg.attach(user.profile.id_card.name, user.profile.id_card.read(), user.profile.id_card.content_type)
Вы можете прочитать больше в Django Docs. Ищу attach()
и знаю, что он отличается от attach_file()
РЕДАКТИРОВАТЬ 1
Так как вы упомянули в комментариях, что id_card
выдает ошибку, я предполагаю, что вы не получаете правильную модель. Из того, что я вижу, я не уверен, что вы делаете это правильно. Вы должны получить Profile
Модель экземпляра выглядит следующим образом:
someVar = Profile.objects.get(user=request.user) # assuming the current user is the one that you would like to be
а затем, чтобы прикрепить файл, используйте:
msg.attach(someVar.id_card.name, someVar.id_card.read(), 'image/png') # assuming you will be attaching png's only
Надеюсь это поможет!