zoukankan      html  css  js  c++  java
  • python 发送邮件

    一 使用SMTP模块发送邮件

    复制代码
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    msg_from = '***@qq.com'  # 发送方邮箱
    passwd = '****'  # 填入发送方邮箱的授权码(填入自己的授权码,相当于邮箱密码)
    msg_to = ['****@qq.com','**@163.com','*****@163.com']  # 收件人邮箱
    # msg_to = '616564099@qq.com'  # 收件人邮箱
    
    subject = "邮件标题"  # 主题
    content = "邮件内容,我是邮件内容,哈哈哈"
    # 生成一个MIMEText对象(还有一些其它参数)
    msg = MIMEText(content)
    # 放入邮件主题
    msg['Subject'] = subject
    # 也可以这样传参
    # msg['Subject'] = Header(subject, 'utf-8')
    # 放入发件人
    msg['From'] = msg_from
    # 放入收件人
    # msg['To'] = '616564099@qq.com'
    # msg['To'] = '发给你的邮件啊'
    try:
        # 通过ssl方式发送,服务器地址,端口
        s = smtplib.SMTP_SSL("smtp.qq.com", 465)
        # 登录到邮箱
        s.login(msg_from, passwd)
        # 发送邮件:发送方,收件方,要发送的消息
        s.sendmail(msg_from, msg_to, msg.as_string())
        print('成功')
    except s.SMTPException as e:
        print(e)
    finally:
        s.quit()
    复制代码

    二 发送html格式邮件

    复制代码
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    msg_from = '306334678@qq.com'  # 发送方邮箱
    passwd = 'ldoetnwqdjqqbjjj'  # 填入发送方邮箱的授权码(填入自己的授权码,相当于邮箱密码)
    msg_to = ['616564099@qq.com']  # 收件人邮箱
    # msg_to = '616564099@qq.com'  # 收件人邮箱
    
    subject = "邮件标题"  # 主题
    # *************发送html的邮件**********
    content = '''
    <p>Python 邮件发送测试...</p>
    <p><a href="http://www.baidu.com">这是一个链接</a></p>
    '''
    # 生成一个MIMEText对象
    msg = MIMEText(content)
    # 放入邮件主题
    msg['Subject'] = subject
    # 也可以这样传参
    # msg['Subject'] = Header(subject, 'utf-8')
    # 放入发件人
    msg['From'] = msg_from
    # 放入收件人
    # msg['To'] = '616564099@qq.com'
    # msg['To'] = '发给你的邮件啊'
    try:
        # 通过ssl方式发送
        s = smtplib.SMTP_SSL("smtp.qq.com", 465)
        # 登录到邮箱
        s.login(msg_from, passwd)
        # 发送邮件:发送方,收件方,要发送的消息
        s.sendmail(msg_from, msg_to, msg.as_string())
        print('成功')
    except s.SMTPException as e:
        print(e)
    finally:
        s.quit()
    复制代码

    三 发送带附件的邮件

    复制代码
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    from email.mime.multipart import MIMEMultipart
    from email.mime.base import MIMEBase
    from email.mime.image import MIMEImage
    from email import  encoders
    msg_from = '306334678@qq.com'  # 发送方邮箱
    passwd = '***'  # 填入发送方邮箱的授权码(填入自己的授权码,相当于邮箱密码)
    msg_to = ['616564099@qq.com']  # 收件人邮箱
    
    subject = "邮件标题"  # 主题
    # 创建一个带附件的实例
    msg = MIMEMultipart()
    # 放入邮件主题
    msg['Subject'] = subject
    # 也可以这样传参
    # msg['Subject'] = Header(subject, 'utf-8')
    # 放入发件人
    msg['From'] = msg_from
    
    # 邮件正文内容
    msg.attach(MIMEText('Python 邮件发送测试……', 'plain', 'utf-8'))
    
    # 构造附件1,传送当前目录下的 test.txt 文件
    att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
    att1["Content-Type"] = 'application/octet-stream'
    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    att1["Content-Disposition"] = 'attachment; filename="test.txt"'
    msg.attach(att1)
    
    # 构造附件2,
    with open('test.png', 'rb') as f:
        # 设置附件的MIME和文件名,这里是png类型:
        mime = MIMEBase('image', 'png', filename='test.png')
        # 加上必要的头信息:
        mime.add_header('Content-Disposition', 'attachment', filename='test.png')
        mime.add_header('Content-ID', '<0>')
        mime.add_header('X-Attachment-Id', '0')
        # 把附件的内容读进来:
        mime.set_payload(f.read())
        # 用Base64编码:
        encoders.encode_base64(mime)
        # 添加到MIMEMultipart:
        msg.attach(mime)
    # 构造附件3,图片格式
    fp = open('test.png', 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()
    # 定义图片 ID,在 HTML 文本中引用
    msgImage.add_header('Content-ID', '<image1>')
    msg.attach(msgImage)
    try:
        # 通过ssl方式发送
        s = smtplib.SMTP_SSL("smtp.qq.com", 465)
        # 登录到邮箱
        s.login(msg_from, passwd)
        # 发送邮件:发送方,收件方,要发送的消息
        s.sendmail(msg_from, msg_to, msg.as_string())
        print('成功')
    except s.SMTPException as e:
        print(e)
    finally:
        s.quit()
    复制代码

     四 Django发送邮件

    在setting中配置

    复制代码
    # EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'smtp.qq.com'  # 如果是 163 改成 smtp.163.com
    EMAIL_PORT = 465
    EMAIL_HOST_USER = '306334678@qq.com'  # 帐号
    EMAIL_HOST_PASSWORD = '***'  # 密码
    DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
    #这样收到的邮件,收件人处就会这样显示
    #DEFAULT_FROM_EMAIL = 'lqz<'306334678@qq.com>'
    EMAIL_USE_SSL = True   #使用ssl
    #EMAIL_USE_TLS = False # 使用tls
    
    #EMAIL_USE_SSL 和 EMAIL_USE_TLS 是互斥的,即只能有一个为 True
    复制代码

    view视图函数

    复制代码
        from django.core.mail import send_mail
        import threading
        from mybbs import settings
    
        t = threading.Thread(target=send_mail, args=("您的文章%s新增了一条评论内容" ,
                                                     'ddd',
                                                     settings.EMAIL_HOST_USER,
                                                     ["616564099@qq.com"])
                             )
        t.start()
    复制代码

    一次性发多封邮件

    复制代码
    from django.core.mail import send_mass_mail
    
    message1 = ('第一封邮件标题', '这是邮件内容', 'from@example.com', ['first@example.com', 'other@example.com'])
    message2 = ('第二封邮件标题', '这是邮件内容', 'from@example.com', ['second@test.com'])
    '''
    fail_silently: (可选)布尔值。为 False 时, send_mail 会抛出 smtplib.SMTPException 异常。smtplib 文档列出了所有可能的异常。 这些异常都是 SMTPException 的子类
    '''
    send_mass_mail((message1, message2), fail_silently=False)
    '''
    send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。
    '''
    复制代码

    携带附件或发送html(需要接收方支持)

    复制代码
    from django.core.mail import EmailMultiAlternatives
    # subject 主题 content 内容 to_addr 是一个列表,发送给哪些人
    msg = EmailMultiAlternatives('邮件标题', '邮件内容', '发送方', ['接收方'])
    msg.content_subtype = "html"
    # 添加附件(可选)
    msg.attach_file('test.txt')
    # 发送
    msg.send()
    复制代码

    备注:send_mail 每次发邮件都会建立一个连接,发多封邮件时建立多个连接。而 send_mass_mail 是建立单个连接发送多封邮件,所以一次性发送多封邮件时 send_mass_mail 要优于 send_mail。

    各大邮箱smtp服务器及端口

     View Code

     qq邮箱配置smtp

    登录qq邮箱:

     

    开启smtp服务,生成授权码

  • 相关阅读:
    系统维护相关问题
    Python环境维护
    哈希表解决字符串问题
    论文笔记二:《A Tutoral on Spectral Clustering》
    论文笔记之哈希学习比较--《Supervised Hashing with Kernels》《Towards Optimal Binary Code Learning via Ordinal Embedding》《Top Rank Supervised Binary Coding for Visual Search》
    Java中String、StringBuffer、StringBuilder的比较与源 代码分析
    浙大pat1040 Longest Symmetric String(25 分)
    浙大pat1039 Course List for Student(25 分)
    浙大pat---1036 Boys vs Girls (25)
    百炼oj-4151:电影节
  • 原文地址:https://www.cnblogs.com/jianhaozhou/p/10075869.html
Copyright © 2011-2022 走看看