#python自带的库,无需第三方下载
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
def send_email_by_qq(to):
sender_mail = '88888888@qq.com'#①发件人的邮箱(乱打的)
sender_pass = 'aaaaaaaaaaaaa'#②邮箱授权码,如何获取下方有链接(这里我是乱打的)
# 设置总的邮件体对象,对象类型为mixed
msg_root = MIMEMultipart('mixed')
# 邮件添加的头尾信息等
msg_root['From'] = '88888888@qq.com<88888888@qq.com>'#③发件人
msg_root['To'] = to
# 邮件的主题,显示在接收邮件的预览页面
subject = '小牛马'#④邮件主题
msg_root['subject'] = Header(subject, 'utf-8')
# 构造文本内容
text_info = '小牛马'#⑤邮件内容
text_sub = MIMEText(text_info, 'plain', 'utf-8')
msg_root.attach(text_sub)
# 构造超文本
url = "www.baidu.com"#⑥需要插入链接时,在此输入url
html_info = """
<p>点击以下链接,你会去向一个更大的世界</p>
<p><a href="%s">click me</a></p>
<p>i am very galsses for you</p>
"""% url
html_sub = MIMEText(html_info, 'html', 'utf-8')
# 如果不加下边这行代码的话,上边的文本是不会正常显示的,会把超文本的内容当做文本显示
html_sub["Content-Disposition"] = 'attachment; filename="csdn.html"'
# 把构造的内容写到邮件体中
msg_root.attach(html_sub)
# 构造图片
image_file = open(r'C:\Users\ASUS\Desktop\stm32f103c8t6核心板.png', 'rb').read()#⑦需要插入图片时,在此插入图片路径
image = MIMEImage(image_file)
image.add_header('Content-ID', '<image1>')
# 如果不加下边这行代码的话,会在收件方方面显示乱码的bin文件,下载之后也不能正常打开
image["Content-Disposition"] = 'attachment; filename="red_people.png"'
msg_root.attach(image)
# 构造附件
txt_file = open(r'C:\Users\ASUS\Desktop\申报书.doc', 'rb').read()#⑧需要插入附件时,加入文件路径
txt = MIMEText(txt_file, 'base64', 'utf-8')
txt["Content-Type"] = 'application/octet-stream'
#以下代码可以重命名附件为hello_world.txt
txt.add_header('Content-Disposition', 'attachment', filename='申报书2.doc')#此处filename可自定义命名发过去的附件名称
msg_root.attach(txt)
try:
'''
具体的python连接目标服务器的代码如下:
注:本文章用的是qq的smtp服务器。
常用邮箱的smtp服务器地址:
新浪邮箱:smtp.sina.com,搜狐邮箱:smtp.sohu.com,qq邮箱:smtp.qq.com
'''
sftp_obj =smtplib.SMTP('smtp.qq.com', 25)#⑨选择邮箱类型
sftp_obj.login(sender_mail, sender_pass)
sftp_obj.sendmail(sender_mail, to, msg_root.as_string())
sftp_obj.quit()
print('sendemail successful!')
except Exception as e:
print('sendemail failed next is the reason')
print(e)
if __name__ == '__main__':
# 可以是一个列表,支持多个邮件地址同时发送,测试改成自己的邮箱地址
to = '123456789@qq.com'#⑩收件人的邮箱
send_email_by_qq(to)
一封邮件可由:文本内容、超链接文本、图片内容、附件构成
代码中这四部分已分段隔开,不需要哪一部分,就将其注释掉。
(多段注释快捷键ctrl+/,需要将其恢复再次ctrl+/)
使用步骤
使用步骤在代码中由①到⑩标出,其中⑤到⑧非必需填,根据需要选择是否注释掉。
①:发件人的邮箱
②:邮箱授权码
③:发件人信息完善
④:邮件主题
⑤:邮件文本内容
⑥:邮件超链接
⑦:邮件图片
⑧:邮件附件
⑨:选择邮箱类型
⑩:选择收件人
详情原理见下链接
python发邮件详解,smtplib和email模块详解