Django HTML-форма Отправить вложение электронной почты - PullRequest
0 голосов
/ 09 марта 2019

У меня следующая проблема с использованием этого импорта

from django.core.mail.message import EmailMessage

И мой код выглядит примерно так:

if request.method == 'POST':
    email = EmailMessage()
    email.subject = "Test"
    email.body = mainMessage
    email.from_email = "SMTP <XXX@XXX.net>"
    email.to = [ "XXX@XXX.net" ]
    email.attach_file(file)

    email.send()

И я проверяю свой файл с помощью:

if 'file' in request.FILES:
    file = request.FILES['file']
else:
    file = False

И вот как выглядит мой HTML

<form method="post" action="{% url 'myurl' %}" enctype="multipart/form-data">
                {% csrf_token %}

    <input type="file" name="file" required><br>

    <input type="submit" name="submit" value="Submit">
</form>

Если я выберу файл, как я могу сделать его для отправки в качестве вложения к этому письму? Если я удаляю email.attach_file(file), он работает просто отлично, но отправляет только текст.

1 Ответ

0 голосов
/ 09 марта 2019
if request.method == 'POST' and request.FILES['file']:
    file = request.FILES['file'] 
    if (str(file.content_type) == 'image/jpeg' 
       or str(file.content_type) == 'image/png'):
        if (int(file.size) <= 5000000):
            fs = FileSystemStorage()
            filename = fs.save('YOUR_DIRECTORY/' + file.name, file)

            email = EmailMessage()
            email.subject = "XXX | Bildupload"
            email.body = mainMessage
            email.from_email = "SMTP <xxx@xxx.net>"
            email.to = ["xxx@xxx.net"]
            email.attach_file(filename)
            email.send()

            answer = 'Die Datei wurde erfolgreich hochgeladen'
            errorAnswer = ''
            return render(request, 'app/hochladen.html', {
                'answer': answer
            })
        else:
            errorAnswer = 'Der Upload hat nicht funktioniert.' 
    else:
        errorAnswer = 'Der Upload hat nicht funktioniert.'
    return render(request, 'app/hochladen.html', {
        'errorAnswer': errorAnswer
    })

Если кому-то интересно, как это сделать, это возможно с помощью кода, размещенного выше.Вы можете удалить второй и третий оператор if, так как они проверяют размер и тип файла.

Единственный ответ, который я нашел, - сначала загрузить файл на сервер, а затем получить к нему доступ оттуда.Хотя я не знаю, как удалить его после отправки электронного письма и его прикрепления.

И вам необходимо правильно настроить файл settings.py и добавить папку / media / Folder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...