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("邮件发送失败")

发送

原文地址:https://www.cnblogs.com/ddf128/p/12025409.html