Django框架通过表单发送邮件

为什么我回去做这个东西呢,主要是我在写blog的时候刚好我的blog模板中有这样一个版块就想了想去搞搞吧!在这个发送邮件的过程中主要需要用到三个两个库smtllib和email库,库可以在您的Windows工作域中使用

pip3 install smtplib/email

进行安装库文件。

在使用QQ邮件代理发送邮件时,需要以下参数整理发件人邮箱、发件人姓名(可选)、发件人邮件授权码、邮件标题、邮件正文、收件人邮箱、收件人姓名(可选)、QQ邮件服务器地址、服务器端口等信息。

web表单可以写成下面格式:

<input type="text" name="name" placeholder="Name" required>
<input type="email" name="email" placeholder="Email" required>
<input type="password" name="password" placeholder="邮件授权码" required>
<input type="text" name="subject" placeholder="Subject" required>
<textarea name="message" rows="7" placeholder="Your Message" required></textarea>

views进行参数整理因为点击提交按钮过来之后是我设置表单是POST请求,所以需要判断代码如下:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

if request.method == "POST":
    #  需要获取到的参数如下所示
    smtpserver = 'smtp.qq.com'
    smtpport = '465'
    from_name = request.POST.get('name')
    From_mail = request.POST.get('email')
    password = request.POST.get('password')
    subject = request.POST.get('subject')
    message = str(request.POST.get('message'))
    To_mail = '****@qq.com'
    # password = '**********'
    #  以下是对参数进行设置,方便在发送时符合正确的格式规则
    msg = MIMEMultipart()
    msg["Subject"] = Header(subject, "utf-8")
    msg["From"] = Header(From_mail+'<'+from_name+'>', "utf-8")
    msg["To"] = Header(To_mail, "utf-8")
    msgText = MIMEText(message, 'plain', 'utf-8')
    msg.attach(msgText)

服务层处理代码,需要根据以上获取到的参数进行请求转发邮件,代码请看下面:

def sendsmtp(msg, From_mail, password, To_mail, smtpserver, smtpport,):
    try:
        # 这块是通过SMTP_SSL进行服务器连接
        smtp = smtplib.SMTP_SSL(smtpserver, smtpport)
        # 根据用户邮箱账号和邮件授权码进行登录邮箱
        smtp.login(From_mail, password)
        # 发送邮件,最后参数是要发送的内容
        smtp.sendmail(From_mail, To_mail, msg.as_string())
        tishi = '发送成功!'
    except(smtplib.SMTPRecipientsRefused):
        tishi = ("Recipient refused")
    except(smtplib.SMTPAuthenticationError):
        tishi = "Auth error"
    except(smtplib.SMTPSenderRefused):
        tishi = "Sender refused"
    except(smtplib.SMTPException) as e:
        tishi = e.message
    finally:
        # 完成之后一定到对内存进行释放
        smtp.quit()
    return tishi

最后简单说一说邮件授权码怎么获取吧,在QQ邮箱设置中找到账户往下拉会有下面这个东西

把SMTP服务打开,然后点击下面生成授权码即可获取到邮件授权码。