天天看點

django通過郵件發送檔案django通過郵件發送檔案

django通過郵件發送檔案

我使用的是qq郵箱發送的,前題是QQ郵箱要開通IMAP/SMTP服務。開通方式:QQ郵箱>>設定>>賬戶>>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務。

django通過郵件發送檔案django通過郵件發送檔案

setting.py設定

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # 固定寫法
EMAIL_HOST = 'smtp.qq.com'  # 騰訊QQ郵箱 SMTP 伺服器位址
EMAIL_PORT = 465  # SMTP服務的端口号
EMAIL_HOST_USER = '[email protected]'  # 發送郵件的QQ郵箱
EMAIL_HOST_PASSWORD = ''  # 在QQ郵箱->設定->帳戶->“IMAP......服務” 裡得到的在第三方登入QQ郵箱授權碼
EMAIL_USE_SSL = True
EMAIL_USE_TLS = False
           

views.py中發送郵件

from django.core.mail import EmailMessage
from rest_framework import viewsets, status, generics

class SendFileAPIView(generics.GenericAPIView):

    serializer_class = SendFileSerializer
    
    def post(self, request):
        instance_serializer = self.serializer_class(data=request.data)
        instance_serializer.is_valid(raise_exception=True)
        file_name = instance_serializer.validated_data.get('file_name')
        syspath = os.path.dirname(os.path.abspath(__name__))
        file_path = os.path.join(syspath, 'excelfile', file_name)
        if os.path.isfile(file_path):
            email = EmailMessage(
                '流調系統檔案下載下傳',
                file_name+'下載下傳',
                '[email protected]',
                ['[email protected]'],
            )
            email.attach_file(file_path)
            email.send()
            return Response('success', status=status.HTTP_200_OK)
        else:
            return Response('no file', status=status.HTTP_200_OK)