django发送带附件、图像、html格式的邮件

1. 效果图:

2. settings.py配置项

# 发送邮件配置项
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smpt服务器地址
EMAIL_HOST = 'smtp.163.com'
# 端口
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = '[email protected]'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'XPTLZDPKAWWHTSLI'
# 收件人看到的发件人
EMAIL_FROM = 'mayanan<[email protected]>'
# 报错此项必须加上
DEFAULT_FROM_EMAIL = '[email protected]'

3. views.py代码

from django.shortcuts import render, HttpResponse
from django.core.mail import send_mail, EmailMultiAlternatives
from django.conf import settings
from email.header import make_header
from email.mime.text import MIMEText  #html格式和文本格式邮件
from email.mime.image import MIMEImage  #带图片格式邮件
import os


def send_common_email(request):
    # 发邮件(subject:邮件主题, message:邮件内容, from_email:发件人, recipient:收件人列表, html_message:带有Html标签的邮件内容)
    subject = "天天生鲜欢迎信息"
    message = "哈哈哈哈哈"
    from_email = settings.EMAIL_FROM
    recipient_list = ["[email protected]"]
    ret = send_mail(subject, message, from_email, recipient_list)

    return HttpResponse(ret)


def send_multi_email(request):
    print('**************开始生成消息*********************')
    subject = '报告邮件'
    text_content = '这是一封重要的报告邮件.'
    html_content = '<h1>尊敬的先生/女士您好</h1><h3>这是一封重要的<span style="color: red; font-size: 25px;">机密</span>文件,请查阅后及时销毁。</h3>'
    from_email = settings.DEFAULT_FROM_EMAIL
    receive_email_addr = ["[email protected]"]
    msg = EmailMultiAlternatives(subject, text_content, from_email, receive_email_addr)
    msg.attach_alternative(html_content, "text/html")

    # 发送图像
    html1 = "<div><img src='cid:imgid'></div>"
    msg_html_img = MIMEText(html1, 'html', 'utf-8')
    msg.attach(msg_html_img)
    file_path = os.path.join(settings.BASE_DIR, "static/kd.png")
    with open(file_path, "rb") as f:
        msg_img = MIMEImage(f.read())
    msg_img.add_header('Content-ID', 'imgid')  # 扩展图片标题
    msg.attach(msg_img)

    # 发送附件
    print('********************发送附件txt********************')
    file_path = os.path.join(settings.BASE_DIR, "日志.txt")
    text = open(file_path, 'rb').read()
    file_name = os.path.basename(file_path)
    # 对文件进行编码处理
    b = make_header([(file_name, 'utf-8')]).encode('utf-8')
    msg.attach(b, text)

    print('********************发送附件jpg********************')
    file_path = os.path.join(settings.BASE_DIR, "test.jpg")
    text = open(file_path, 'rb').read()
    file_name = os.path.basename(file_path)
    # 对文件进行编码处理
    b = make_header([(file_name, 'utf-8')]).encode('utf-8')
    msg.attach(b, text)

    print('********************发送附件xlsx********************')
    file_path = os.path.join(settings.BASE_DIR, "test.xlsx")
    text = open(file_path, 'rb').read()
    file_name = os.path.basename(file_path)
    # 对文件进行编码处理
    b = make_header([(file_name, 'utf-8')]).encode('utf-8')
    msg.attach(b, text)

    # msg.attach_file(file_path)
    msg.send()
    if msg.send():
        print('******************发送成功*********************')
    else:
        print('******************发送失败*********************')
    print('********************发送完成********************')

    return HttpResponse("发送完成")

4. urls.py代码

from django.urls import path
from . import views

urlpatterns = [
    path("send_common_email/", views.send_common_email, name="send_common_email"),  # 发送普通邮件
    path("send_multi_email/", views.send_multi_email, name="send_multi_email"),  # 发送带附件和html格式邮件
]

5. 更多详细教程见链接:https://www.cnblogs.com/zhangxinqi/p/9113859.html#_label4

猜你喜欢

转载自blog.csdn.net/weixin_42289273/article/details/113868632