今天我们通过通过pyqt5界面发送一个邮件
功能:
①界面构思
②读取目录下配置信息
③依次循环文件中的信息
④发送邮件
完成这么一个工具,需要PyQt5、os、configparser、smtplib等主要模块,同时通过这些代码调试,会对这些模块也有一个新的认识。
①界面设置
通过Qt Creator 设计出想要的界面
click信号传递,是根据使用者来定,用于.ui文件中设置,还是在代码中写入,条条道路通罗马,就看使用者更倾向于那一种。
qtCreatorFile ="./MainWindow.ui"
# 使用uic加载
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class MainWindow(QMainWindow,Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
Ui_MainWindow.__init__(self)
②读取目录下配置信息
此处需要运用到configparser模块
path = os.path.join(os.path.dirname(__file__),'mailinfo.ini').replace('\\','/')
config = configparser.RawConfigParser()
# 读取.ini文件
config.read('mailinfo.ini')
# 列出所有section
sec = config.sections()
print(" 邮箱发送组:{}!".format(sec))
#print('sections:', sec)
# 列出指定section中的option
opts = config.options("mail1")
#print('options:', opts)
items1 = config.items('mail1')
③依次循环文件中的信息
for section in sec:
fundid = config.get(section,'fundid')
tolist = config.get(section,'tolist')
cc_mail = config.get(section,'cc_mail')
sub_title = config.get(section,'sub_title')
passage = config.get(section,'passage')
#附件添加
load = fundid +'_' + gzdate
payload ='C:/TEST/'+load +'.xls'
此处对payload ,测试,发现若 换成
tt=self.textEdit_xpath.txt()
payload =tt+load +'.xls',
在添加附件时,att1 = MIMEText(open(isExistAttach,'rb').read(),'base64','utf-8') ,此处发送cnfig第一个邮箱后的第二个会调试退出,多次测试,也不知道原因,待以后解决
④发送邮件
try:
mail_host=‘****.com.cn’
smtp = smtplib.SMTP()
smtp.connect(mail_host)
smtp.login(mail_user, mail_pass
msg = MIMEMultipart()
msg['From'] =From
msg['mail_pass'] = mail_pass
msg["To"] = To# qt5 收件人会出现多个字符串形式g,
msg["Cc"] = Cc
msg['Subject'] = Subject +'-' + time1# 标题
isExistAttach = payload
filename = os.path.basename(isExistAttach)
att1 = MIMEText(open(isExistAttach,'rb').read(),'base64','gb2312')# 添加表格为附件
att1["Content-Type"] ='application/octet-stream'
# 附件名称为中文时的写法
att1.add_header("Content-Disposition","attachment",filename=filename)
# 附件名称非中文时的写法
# att["Content-Disposition"] = 'attachment; filename="test.html")'
msg.attach(att1)
print("附件为:".format(filename))
msg.attach(MIMEText(DictData['passage'],'plain','utf-8'))# 添加正文
smtp.sendmail(DictData['From'], DictData["To"].split(',') + DictData["Cc"].split(','), msg.as_string())
print("‘{}’邮箱发送成功!".format(Subject))
smtp.quit()
第一次写,希望后续会越来越棒,目前也建了一个群1095106956,需要优化升级,或者有新的想法的朋友,可以加入,一起探讨!