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