代码之家  ›  专栏  ›  技术社区  ›  lord stock

Django Rest Framework在电子邮件中发送图片

  •  0
  • lord stock  · 技术社区  · 4 年前

    你好,我遇到了一个关于在django rest API发送电子邮件的问题。 想法是用户发送电子邮件并上传来自序列化程序部分的图像,我想通过电子邮件向用户发送相同的图像。但我没有收到电子邮件中的图片。

    这是我一直在处理的代码。

    models.py
    class Mail(BaseModel):
        full_name = models.CharField(max_length=100)
        image = models.ImageField(upload_to=mail_image_to)
        email = models.EmailField()
    

    下面是我的序列化程序

    class MailSerializer(serializers.ModelSerializer):
        class Meta:
            model = Mail
            fields = '__all__'
    
    
    class AddMailSerializer(MailSerializer):
        class Meta(MailSerializer.Meta):
            fields = (
                'full_name',
                'image',
                'email',
            )
    

    视图.py

    class AddMailView(generics.CreateAPIView):
        """
        Use this endpoint to add mail
        """
        serializer_class = serializers.AddMailSerializer
    
        def perform_create(self, serializer):
            return AddMailUseCase(serializer=serializer).execute()
    

    我通常在usecase.py中编写其余代码

    class AddMailUseCase:
        def __init__(self, serializer):
            self.serializer = serializer
            self.data = serializer.validated_data
    
        def execute(self):
            self._factory()
    
        def _factory(self):
            self._mail = Mail(**self.data)
            self._mail.save()
            SendEmail(
                context={
                    "fullname": self.data['full_name'],
                    'image': self.data['image']
                }
            ).send(to=[self.data['email']])
    

    我正在使用 django-templated-mail 1.1.1 在这里发送电子邮件是我剩下的代码。

    from templated_mail.mail import BaseEmailMessage
    
    
    class SendEmail(BaseEmailMessage):
        template_name = 'email.html'
    

    最后是我的 email.html

    {% load i18n %}
    
    {% block subject %}
    {% blocktrans %}Email Successfully Sent {% endblocktrans %}
    {% endblock subject %}
    
    {% block text_body %}
    {% blocktrans %}You're receiving this email because you recently registered  to our website.{% endblocktrans %}
    
    {% trans "Your submitted details are as follow" %}
    
    {% endblock text_body %}
    
    {% block html_body %}
    {% blocktrans %}
    <p>hello {{ fullname }}</p>{% endblocktrans %}
    {% blocktrans %}
    <img src="{{ image }}" alt="email-image">
    
    <p>{% trans "Thanks for using our site!" %}</p>
    
    {% endblock html_body %}
    

    关于这个问题有什么帮助吗? 我收到的电子邮件如下图片未加载 enter image description here

    0 回复  |  直到 4 年前
        1
  •  0
  •   aliyousefian    4 年前

    而不是使用

    <img src="{{ image }}" alt="email-image">
    

    使用

    <img src="{{ image.url }}" alt="email-image">
    

    并且在您的URL.py添加中

    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = patterns('',
        # ... the rest of your URLconf goes here ...
    ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)