• Python发送邮件


    SMTP模块发邮件

    1、SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

    python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

    Python创建 SMTP 对象语法如下:

    import smtplib
    
    smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
    

    参数说明:

    • host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名如: runoob.com,这个是可选参数。
    • port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。
    • local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。

    2、Python SMTP 对象使用 sendmail 方法发送邮件,语法如下:

    SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
    

    参数说明:

    • from_addr: 邮件发送者地址。
    • to_addrs: 字符串列表,邮件发送地址。
    • msg: 发送消息

    这里要注意一下第三个参数,msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意 msg 的格式。这个格式就是 smtp 协议中定义的格式。

    3、以下执行实例需要你本机已安装了支持 SMTP 的服务,如:sendmail。

    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
     
    sender = 'from@runoob.com'
    receivers = ['429240967@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
     
    # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
    message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
    message['From'] = Header("菜鸟教程", 'utf-8')   # 发送者
    message['To'] =  Header("测试", 'utf-8')        # 接收者
     
    subject = 'Python SMTP 邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
     
    try:
        smtpObj = smtplib.SMTP('localhost')
        smtpObj.sendmail(sender, receivers, message.as_string())
        print "邮件发送成功"
    except smtplib.SMTPException:
        print "Error: 无法发送邮件"

    4、使用第三方 SMTP 服务发送

    这里使用了 QQ 邮箱(你也可以使用 163,Gmail等)的 SMTP 服务,需要做以下配置:

    QQ 邮箱通过生成授权码来设置密码:

    实例;

    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
     
    my_sender='429240967@qq.com'    # 发件人邮箱账号
    my_pass = 'xxxxxxxxxx'              # 发件人邮箱密码
    my_user='429240967@qq.com'      # 收件人邮箱账号,我这边发送给自己
    def mail():
        ret=True
        try:
            msg=MIMEText('填写邮件内容','plain','utf-8')
            msg['From']=formataddr(["FromRunoob",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To']=formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject']="菜鸟教程发送邮件测试"                # 邮件的主题,也可以说是标题
     
            server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
            ret=False
        return ret
     
    ret=mail()
    if ret:
        print("邮件发送成功")
    else:
        print("邮件发送失败")

     Django发送邮件

    1、在项目下settings.py中添加设置:

    #这一项是固定的
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    # smtp服务的邮箱服务器 我用的是qq
    EMAIL_HOST = 'smtp.qq.com'
    # smtp服务固定的端口是25
    EMAIL_PORT = 25
    #发送邮件的邮箱
    EMAIL_HOST_USER = 'xxxx@qq.com'
    #在邮箱中设置的客户端授权密码
    EMAIL_HOST_PASSWORD = 'xxxx'
    #收件人看到的发件人 <此处要和发送邮件的邮箱相同>
    EMAIL_FROM = 'python<xxxx@qq.com>'

    2、配置好映射urls.py, 创建好视图

    from django.conf import settings
    from django.core.mail import send_mail
    
    def email(request):
        """报名成功后给用户发送邮件"""
        msg = '用户名:charlie 密码:123 <a href="哈哈哈" target="_blank">点击激活</a>'
        send_mail('标题', '内容', settings.EMAIL_FROM,['753995422@qq.com'],html_message = msg)
        return HttpResponse('123')
  • 相关阅读:
    将python的代码文件打包成可执行文件
    SpringBoot整合JdbcTemplate连接Mysql
    Golang开发环境搭建
    java中的Lamdba表达式和Stream
    MySQL 优化1
    MySQL you *might* want to use the less safe log_bin_trust_function_creators variable
    MySQL mysqlbinlog
    MySQL 事件调度器
    MySQL 忘记密码解决办法
    MySQL 创建自定义函数(2)
  • 原文地址:https://www.cnblogs.com/charliedaifu/p/10538253.html
Copyright © 2020-2023  润新知