zoukankan      html  css  js  c++  java
  • python之邮件模块

    一,说明:
    常见的电子邮件协议:SMTP,POP,IMAP都遵循TCP/IP协议规范,至于Exchange是邮件服务器,不是收邮件和发邮件的协议
    SMTP: 是简单邮件传输协议,它是一组用于由源地址传送邮件的规则,由它来控制信件的中转方式。简单来说就是发送协议
    POP:协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件,标记等),不会反馈到服务器上,属于收件协议
    IMAP: 提供邮件服务器,与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作(这是和POP协议主要不同点),属于收件协议
    二,SMTP发送邮件
    1,发送普通邮件
    1)我以QQ邮箱为例:找到设置--账户,开启 SMTP 服务器

    开启后需要短信验证码验证,最后一个授权码,一定要牢记(发送邮件的密钥)
    2)smtplib、email 使用如下。其中 MIMEText 构造对象时,第一个参数是邮件正文;第二个参数是subType,可以设置两种格式 'plain' 和 'html';然后一定要指定字符编码‘utf-8’。‘plain’ 表示发送纯文本消息。
    from smtplib import SMTP_SSL
    from email.mime.text import MIMEText

    def sendMail(message,Subject,sender_show,recipient_show,to_addrs,cc_show=''):
    '''
    :param message: str 邮件内容
    :param Subject: str 邮件主题描述
    :param sender_show: str 发件人显示,不起实际作用如:"xxx"
    :param recipient_show: str 收件人显示,不起实际作用 多个收件人用','隔开如:"xxx,xxxx"
    :param to_addrs: str 实际收件人
    :param cc_show: str 抄送人显示,不起实际作用,多个抄送人用','隔开如:"xxx,xxxx"
    '''
    # 填写真实的发邮件服务器用户名、密码
    user = 'root'
    password = '123456'
    # 邮件内容
    msg = MIMEText(message, 'plain', _charset="utf-8")
    # 邮件主题描述
    msg["Subject"] = Subject
    # 发件人显示,不起实际作用
    msg["from"] = sender_show
    # 收件人显示,不起实际作用
    msg["to"] = recipient_show
    # 抄送人显示,不起实际作用
    msg["Cc"] = cc_show
    with SMTP_SSL(host="smtp.exmail.qq.com",port=465) as smtp:
        # 登录发邮件服务器
        smtp.login(user = user, password = password)
        # 实际发送、接收邮件配置
        smtp.sendmail(from_addr = user, to_addrs=to_addrs.split(','), msg=msg.as_string())
    

    if name =='__main':
    message = 'Python 测试邮件...'
    Subject = '主题测试'
    # 显示发送人
    sender_show = 'xxx'
    # 显示收件人
    recipient_show = 'xxx'
    # 实际发给的收件人
    to_addrs = 'xxx@qq.com'
    sendMail(message,Subject,sender_show,recipient_show,to_addrs)
    2、发送HTML格式邮件
    将 MIMEText 第二个参数设置成 'html',如:MIMEText(message, 'html', _charset="utf-8")
    from smtplib import SMTP_SSL
    from email.mime.text import MIMEText

    def sendMail(message,Subject,sender_show,recipient_show,to_addrs,cc_show=''):
    '''
    :param message: str 邮件内容
    :param Subject: str 邮件主题描述
    :param sender_show: str 发件人显示,不起实际作用如:"xxx"
    :param recipient_show: str 收件人显示,不起实际作用 多个收件人用','隔开如:"xxx,xxxx"
    :param to_addrs: str 实际收件人
    :param cc_show: str 抄送人显示,不起实际作用,多个抄送人用','隔开如:"xxx,xxxx"
    '''
    # 填写真实的发邮件服务器用户名、密码
    user = 'root'
    password = '123456'
    # 邮件内容
    msg = MIMEText(message, 'html', _charset="utf-8")
    # 邮件主题描述
    msg["Subject"] = Subject
    # 发件人显示,不起实际作用
    msg["from"] = sender_show
    # 收件人显示,不起实际作用
    msg["to"] = recipient_show
    # 抄送人显示,不起实际作用
    msg["Cc"] = cc_show
    with SMTP_SSL(host="smtp.exmail.qq.com",port=465) as smtp:
    # 登录发送邮件服务器
    smtp.login(user = user, password = password)
    # 实际发送、接收邮件配置
    smtp.sendmail(from_addr = user, to_addrs=to_addrs.split(','), msg=msg.as_string())

    if name =='__main':
    message = '''

    Python 邮件发送测试...


    纵里寻她千百度


    '''
    Subject = '主题测试'
    # 显示发送人
    sender_show = 'xxx'
    # 显示收件人
    recipient_show = 'xxx'
    # 实际发给的收件人
    to_addrs = 'xxx@qq.com'
    sendMail(message,Subject,sender_show,recipient_show,to_addrs)
    3、发送带附件邮件
    发送带附件的邮件需借助类 MIMEMultipart(),然后构造邮件内容及附件,多个附件 attach 多次。
    from smtplib import SMTP_SSL
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart

    def sendMail(message,Subject,sender_show,recipient_show,to_addrs,cc_show=''):
    '''
    :param message: str 邮件内容
    :param Subject: str 邮件主题描述
    :param sender_show: str 发件人显示,不起实际作用如:"xxx"
    :param recipient_show: str 收件人显示,不起实际作用 多个收件人用','隔开如:"xxx,xxxx"
    :param to_addrs: str 实际收件人
    :param cc_show: str 抄送人显示,不起实际作用,多个抄送人用','隔开如:"xxx,xxxx"
    '''
    # 填写真实的发邮件服务器用户名、密码
    user = 'root'
    password = '123456'
    # 邮件内容
    msg = MIMEMultipart()
    msg.attach(MIMEText(message, 'html', _charset="utf-8"))
    # 构造附件1,传送当前目录下的 test.txt 文件
    att = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
    att["Content-Type"] = 'application/octet-stream'
    # 附件名称为中文时的写法
    att.add_header("Content-Disposition", "attachment", filename=("gbk", "", filename))
    # 附件名称非中文时的写法,这里的filename可以任意写,写什么名字,邮件中显示什么名字
    # att["Content-Disposition"] = 'attachment; filename="{}"'.format(filename)
    msg.attach(att)
    # 邮件主题描述
    msg["Subject"] = Subject
    # 发件人显示,不起实际作用
    msg["from"] = sender_show
    # 收件人显示,不起实际作用
    msg["to"] = recipient_show
    # 抄送人显示,不起实际作用
    msg["Cc"] = cc_show
    with SMTP_SSL(host="smtp.exmail.qq.com",port=465) as smtp:
    # 登录发送邮件服务器
    smtp.login(user = user, password = password)
    # 实际发送、接收邮件配置
    smtp.sendmail(from_addr = user, to_addrs=to_addrs.split(','), msg=msg.as_string())

    if name =='__main':
    message = '''

    Python 邮件发送测试...


    纵里寻她千百度


    '''
    Subject = '主题测试'
    # 显示发送人
    sender_show = 'xxx'
    # 显示收件人
    recipient_show = 'xxx'
    # 实际发给的收件人
    to_addrs = 'xxx@qq.com'
    sendMail(message,Subject,sender_show,recipient_show,to_addrs)
    4、发送带图片邮件
    邮件带图片需要用到另一个类 MIMEImage(),多张图片 attach 多次。
    from smtplib import SMTP_SSL
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.image import MIMEImage

    def sendMail(message,Subject,sender_show,recipient_show,to_addrs,cc_show=''):
    '''
    :param message: str 邮件内容
    :param Subject: str 邮件主题描述
    :param sender_show: str 发件人显示,不起实际作用如:"xxx"
    :param recipient_show: str 收件人显示,不起实际作用 多个收件人用','隔开如:"xxx,xxxx"
    :param to_addrs: str 实际收件人
    :param cc_show: str 抄送人显示,不起实际作用,多个抄送人用','隔开如:"xxx,xxxx"
    '''
    # 填写真实的发邮件服务器用户名、密码
    user = 'root'
    password = '123456'
    # 邮件内容
    msg = MIMEMultipart()
    msg.attach(MIMEText(message, 'html', _charset="utf-8"))
    # 邮件主题描述
    msg["Subject"] = Subject
    # 发件人显示,不起实际作用
    msg["from"] = sender_show
    # 收件人显示,不起实际作用
    msg["to"] = recipient_show
    # 抄送人显示,不起实际作用
    msg["Cc"] = cc_show
    # 指定图片为当前目录
    fp = open('test.png', 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()
    # 定义图片 ID,在 HTML 文本中引用
    msgImage.add_header('Content-ID', '')
    msg.attach(msgImage)
    with SMTP_SSL(host="smtp.exmail.qq.com",port=465) as smtp:
    # 登录发送邮件服务器
    smtp.login(user = user, password = password)
    # 实际发送、接收邮件配置
    smtp.sendmail(from_addr = user, to_addrs=to_addrs.split(','), msg=msg.as_string())

    if name =='__main':
    message = '''

    Python 邮件发送测试...


    纵里寻她千百度



    '''
    Subject = '主题测试'
    # 显示发送人
    sender_show = 'xxx'
    # 显示收件人
    recipient_show = 'xxx'
    # 实际发给的收件人
    to_addrs = 'xxx@qq.com'
    sendMail(message,Subject,sender_show,recipient_show,to_addrs)

  • 相关阅读:
    wpf之依赖属性
    wpf之布局控件
    WPF之绑定
    wpf之触发器
    wpf之样式
    wpf之TreeView
    wpf(五)
    【Javaweb】poi实现通过上传excel表格批量导入数据到数据库
    Java读取批量Excel文件
    Centos上通过yum命令删除有关MySQL
  • 原文地址:https://www.cnblogs.com/hally/p/15565677.html
Copyright © 2011-2022 走看看