最近在头疼一件事,做编程的小伙伴的愿景是:能用脚本说话的坚决不手动!!!比如说发邮件。在我之前的一封简书中有写到发送邮件的python脚本。但是这个脚本暴露了一个缺点,就是脚本中有个人信息,特别是邮箱的密码!这个不能有。。。
之前的脚本简书地址为https://www.jianshu.com/p/eaaaa6ef9cff
而且,还有一点就是,带个人信息的脚本通用性很低,因此本次简书中要解决的问题有两个:
1:在脚本中不能出现个人信息。
2:实现脚本的通用性。
在这里,我的想法是:一般情况下个人的home目录其他人是没有访问权限的,因此我们可以将个人信息配置在该目录底下。而且就算是在脚本中将个人信息打印出来,打印的也是当前用户的信息。所以很安全。
第一步:设置配置文件
在home目录下创建一个文件夹,用于存放配置文件。脚本如下:
mkdir .mail
cd .mail
第二步:编写配置文件
账户及邮箱的相关配置:
[Account]
mail_user = ***@qq.com
mail_pass = ************
mail_host = smtp.exmail.qq.com ##腾讯邮箱的协议
usr_name = 姓名 ##发送邮件时的签名,如果需要设置签名的话,可以把和别人不一样的信息设置在该处
发送及抄送的相关设置:
[GC]
receivers =GC@qq.com
cc = aaa@qq.com, bbb@qq.com,xiaohongduan@qq.com,ccc@qq.com,ddd@qq.com
[BMC]
receivers =bmc@qq.comcc = ddd@qq.com, ggg@qq.com,fff@qq.com,hhh@qq.com
[TEST]
receivers =jingchen@qq.com
cc = eee@qq.com,ddd@qq.com
这里的设置考虑到可能发送不同类型的邮件时,发送对象和抄送对象不一样,因此予以设置。针对不同的邮件直接使用对应的标签即可。
第三步:读取配置文件
脚本如下:
import configparser
import os
class MyConfigParser(configparser.ConfigParser):
def __init__(self, defaults=None):
configparser.ConfigParser.__init__(self, defaults=defaults)
def optionxform(self, optionstr):
return optionstr
def read_config():
f_config =os.path.join(os.path.expanduser('~'),".mail") + '/config.ini'
config = MyConfigParser()
config.read(f_config)
titles = config.sections() #['database']
config_dic = {}
for t in titles:
for sub in config.options(t):
if t in config_dic:
config_dic[t].update({sub:config.get(t,sub)})
else:
config_dic.update({t:{sub:config.get(t,sub)}})
return config_dic
这里定义了一个新的MyConfigParser,是因为configparser默认将大写都改成小写,因此对其重新进行了定义。
读取前面配置好当前用户home目录下的config.ini文件。存成名为config_dic的字典。
回到我之前分享的简书https://www.jianshu.com/p/eaaaa6ef9cff。
mail_host = config_dic['Account']['mail_host ']
mail_user = config_dic['Account']['mail_user']
mail_pass = config_dic['Account']['mail_pass']
好了。其他的你想怎么配置就怎么配置吧~~
再提醒一次,发送邮件的脚本必须在有通信功能的服务器上进行操作,没有通信功能的,设置一下免密跳转即可。
才转python没有多久,大家有更好的方法,可以相互讨论哟~