本代码是要实现一个发邮件,且带上附件的效果,但是写着写着发现,如果把内容都写死在程序里,如果发生变化,修改成本太高了,所以就引入了配置文件,将发邮件所需要的信息都放在配置文件里,直接读取就好,便于修改。
完整代码如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication #以上都是发邮件,以及带附件的依赖库
from datetime import datetime,timedelta
import time
from configparser import ConfigParser #读取配置文件的依赖库
import os
class ReadConfigFile(object): #读取配置文件类
def read_config(self,m,n):
conn = ConfigParser()
file_path = os.path.join(os.path.abspath('.'),'日报dbinfo.ini') #dbinfo.ini是存放数据库配置的配置文件
if not os.path.exists(file_path):
raise FileNotFoundError("文件不存在")
conn.read(file_path,encoding='utf-8')
read_reslut = conn.get(m,n)
return [read_reslut]
rc = ReadConfigFile() #实例化
#如下都是发邮件的代码
context = '''
这是一封遥远的邮件,test巴扎黑
'''
from_addr=rc.read_config('smtp_info','from_addr') #从配置文件读取发件人,收件人,服务器地址,端口,用户,密码等信息
to_addr=rc.read_config('smtp_info','to_addr')
smtp_server=rc.read_config('smtp_info','smtp_server')
smtp_port=rc.read_config('smtp_info','smtp_port')
loguser=rc.read_config('smtp_info','loguser')
passwd=rc.read_config('smtp_info','passwd')
wordfile = '巴扎黑.txt'
msg1 = MIMEMultipart()
msg1.attach(MIMEText(context, 'plain', 'utf-8'))
att1 = MIMEApplication(open(wordfile, 'rb').read())
att1.add_header('Content-Disposition', 'attachment', filename=wordfile) # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
msg1.attach(att1)
msg1['From'] = Header("c01", 'utf-8') # 发件人的昵称
msg1['To'] = Header("c02", 'utf-8') # 收件人的昵称
msg1['Subject'] = Header("巴扎黑", 'utf-8') # 定义主题内容
#print(message)
smtp = smtplib.SMTP()# 创建 SMTP 对象
smtp.connect(smtp_server[0], smtp_port[0])# 连接(connect)指定服务器
smtp.login(user=loguser[0], password=passwd[0])# 登录,需要:登录邮箱和授权码
smtp.sendmail(from_addr[0], to_addr[0], msg=msg1.as_string())#发送邮件
执行结果如下: