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

    # Python3 SMTP发送邮件
    """
    语法
       import smtplib
       smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
    参数说明
       host: SMTP 服务器主机 这个是可选参数。
       port: 指定 SMTP 服务使用的端口号,一般情况下SMTP端口号为25。
       local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为 localhost 即可
    
    Python SMTP对象使用sendmail方法发送邮件,语法如下:
       SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
           from_addr: 邮件发送者地址。
           to_addrs: 字符串列表,邮件发送地址。
           msg: 发送消息
    """
    
    # 引入模块
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.utils import formataddr
    from email.mime.multipart import MIMEMultipart
    
    my_sender = 'ddf@163.com'     # 发件人邮箱账号
    my_pass = '2019'               # 发件人邮箱密码
    my_user = '1008@qq.com'      # 收件人邮箱账号,我这边发送给自己
    
    # 基本使用函数
    def mail():
        ret = True
        try:
            msg = MIMEText('填写邮件内容', 'plain', 'utf-8')
            msg['From'] = formataddr(["ddf", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["微刻时光", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "python 邮件发送测试"  # 邮件的主题,也可以说是标题
    
            server = smtplib.SMTP_SSL("smtp.163.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
            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
    # 发送html
    def sendHtml():
        ret  = True
        try:
            htmlStr = """
                      <p>请关注我的博客</p>
                      <p><a href="https://www.cnblogs.com/ddf128/">微刻时光</a></p> 
            """
            msg = MIMEText(htmlStr, 'html', 'utf-8')
            msg['From'] = formataddr(["ddf", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["微刻时光", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "请关注我的博客"  # 邮件的主题,也可以说是标题
    
            server = smtplib.SMTP_SSL("smtp.163.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:
            ret = False
        return ret
    
    # 发送带附件的邮件
    def sendAtt():
        ret = True
        try:
            # 创建一个带附件的实例
            msg = MIMEMultipart()
            msg['From'] = formataddr(["ddf", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["微刻时光", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "请关注我的博客"  # 邮件的主题,也可以说是标题
    
            # 邮件正文内容
            msg.attach(MIMEText('微刻时光发来的附件', 'plain', 'utf-8'))
    
            # 构造附件1,传送当前目录下的 test.txt 文件
            att1 = MIMEText(open('1.txt', 'rb').read(), 'base64', 'utf-8')
            att1["Content-Type"] = 'application/octet-stream'
            # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
            att1["Content-Disposition"] = 'attachment; filename="1.txt"'
            msg.attach(att1)
    
            server = smtplib.SMTP_SSL("smtp.163.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception as red:
            print(red)
            ret = False
        return ret
    
    # 在 HTML 文本中添加图片
    def sendImg():
        ret = True
        try:
            # 创建一个带附件的实例
            msg = MIMEMultipart('related')
            msg['From'] = formataddr(["ddf", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["微刻时光", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "请关注我的博客"  # 邮件的主题,也可以说是标题
    
            msgAlternative = MIMEMultipart('alternative')
            msg.attach(msgAlternative)
    
            # 邮件正文内容  图片的2种用法
            msg_str = """
            <p>Python 邮件发送测试...</p>
            <p><img src="http://pc.yizhentong.vip/static/img_qrcode/YZT-LOGO.png"></p>
            <p><a href="https://www.cnblogs.com/ddf128/">微刻时光</a></p>
            <p>图片演示:</p>
            <p><img src="cid:image1"></p>
            """
            msgAlternative.attach(MIMEText(msg_str, 'html', 'utf-8'))
    
            # 指定图片为当前目录
            fp = open('timg.jpg', 'rb')
            msgImage = MIMEImage(fp.read())
            fp.close()
    
            # 定义图片 ID,在 HTML 文本中引用
            msgImage.add_header('Content-ID', '<image1>')
            msg.attach(msgImage)
    
    
            server = smtplib.SMTP_SSL("smtp.163.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception as red:
            print(red)
            ret = False
        return ret
    
    # 基本使用函数调用
    ret1 = mail()
    
    # 发送html
    ret2 = sendHtml()
    
    # 发送附件
    ret3 = sendAtt()
    
    # 发送图片
    ret4 = sendImg()
    
    if ret1:
        print("邮件发送成功")
    else:
        print("邮件发送失败")

    发送

  • 相关阅读:
    # 牛客挑战赛46_C题排列(前缀优化DP)
    # 牛客挑战赛46 B最小的指数
    Educational Codeforces Round 99 (Rated for Div. 2)
    Wireless Password HDU
    Codeforces Round #686 (Div. 3)
    网络流之最小费最大流
    网络流之最大流
    next()和nextLine()的区别
    初识HTML
    jQuery笔记
  • 原文地址:https://www.cnblogs.com/ddf128/p/12025409.html
Copyright © 2011-2022 走看看