Django rest framework: электронная почта sendgird с вложением без поля файла только модели, чтобы открыть файл и кнопка отправки для отправки электронной почты - PullRequest
1 голос
/ 21 октября 2019

Я новичок в Django Rest Framework.
Я пытаюсь отправить электронное письмо с вложением.

Вот мой код.

model.py


class EmailModel(models.Model):
    upload_file = models.FileField(upload_to='location/location/files', blank=False)
    class Meta:
        verbose_name = 'Applicant CSV Upload'
        verbose_name_plural = 'Applicant CSV Upload'


admin.py

@admin.register(EmailModel)
class EmailAdmin(admin.ModelAdmin):
    class Meta:
      model = EmailModel

View.py


def send_email():
    email = EmailMessage(
        'Title',
        ('abc', 'abc@gmail.com', '123123123'),
        'abc@gmail.com',
        ['abc@gmail.com']
    )
    email.attach_file(EmailViewSet.upload_file)
    email.send()

class EmailViewSet(viewsets.ModelViewSet):
    queryset = EmailModel.objects.all()
    serializer_class = EmailSerializer
    def create(self, request, *args, **kwargs):
        send_mail(' Test Subject here', 'Test here is the message.', 'abc@gmail.com', ['abc@gmail.com'], fail_silently=False)
        response = super(EmailViewSet, self).create(request, *args, **kwargs)
        send_email()  # sending mail
        data = [{'location': request.data.get('location'), 'image': file} for file in request.FILES.getlist('image')]
        serializer = self.get_serializer(data=data, many=True)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        message = EmailMessage(subject='Applicant data', body='PFA', from_email='abc@gmail.com',
                               to='abc@gmail.com', bcc='abc@gmail.com', connection=None,
                               attachments=data, headers=self.data, cc='abc@gmail.com', reply_to=None)
        # Attach file
        # with open(attachment, 'rb') as file:
        #     message.attachments = [
        #     (attachment, file.read(), 'application/pdf')
        # ]
        return response, message.send(), Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

Сериализатор. py

class EmailSerializer(serializers.ModelSerializer):
    class Meta:
        model = EmailModel
        fields = ('upload_file',)

settings.py



EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey' # this is exactly the value 'apikey'
EMAIL_HOST_PASSWORD = 'here i am using my sendgrid api key directy' # this is your API key
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = 'here i am using same gmail id on which i have created my send grid account'

В view.py и serializer.py я упомянул каждый метод, который я пытался отправить по электронной почте, таквот почему это так перепутано. Ни один из методов не работает. Даже create метод вообще не вызывается.

Это появляется у моего администратора API, я хочу изменить текст кнопки сохранения для отправки.

This is showing up on my api admin i want to change save button text to send.

  1. Я не хочу создавать модель. который создан для показа этого файла в админ. Требуется модель.
  2. Также не хочу сохранять файл в папке. который сохраняется.
  3. filefiled просто откройте файл и на мой жестко запрограммированный адрес электронной почты отправьте этот файл по электронной почте, когда я нажму кнопку сохранения / отправки.

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Вы можете создать пользовательскую страницу администратора, где вам не потребуются модели. Этот вопрос решает эту проблему.

Теперь, когда вы создаете свою пользовательскую страницу, в представлениях вы можете просто использовать Python API, предоставляемый sendgrid, и делать все, что вы хотите достичь. Вот документация python для того же.

0 голосов
/ 21 октября 2019

Если вы хотите отправить письмо с вложением, вы уже запросили более подробную информацию здесь Отправка писем с вложением в django

...