python邮件发送万能脚本及打包为exe程序
继上一篇博客讲完基础知识 点我看,这里分享一下一个能够应付所有普通情况的邮件发送的python程序脚本。
下面一起来看看吧!
# coding=utf-8
import smtplib # 引用smtplib模块
import sys #用于获取输入参数
from email.mime.text import MIMEText # 纯文本、HTML页面
from email.mime.image import MIMEImage # 图片
from email.mime.multipart import MIMEMultipart # 多形式组合,可包含文本和组合
from email.mime.application import MIMEApplication
from email.header import Header # 邮件头
def send_email(*args):
# 定义变量
msg = MIMEMultipart()#内容接受池
msg["Accept-Language"] = "zh-CN"
msg["Accept-Charset"] = "ISO-8859-1,utf-8"
from_addr = args[0] # 发件人地址
password = args[1] # 授权码
to_addr = args[2] # 送信地址
msg['Subject'] = args[3] # 邮件主题
msg.attach(MIMEText(args[4], 'plain', 'utf-8')) # 发信内容及编码等
file_path_list = args[5].split(',') # 附件路径
for _, file_path in enumerate(file_path_list):
if file_path.endswith('.png') or file_path.endswith('.jpg'):
msg = attach_picture(file_path, msg)
else:
msg = attach_other_file(file_path, msg)
port = 587 if from_addr.endswith('countrygarden.com.cn') else 465
smtp_server = 'smtp.' + from_addr.split('@')[-1]
server = login(from_addr, password, smtp_server,port)
try:
server.sendmail(from_addr, to_addr, msg.as_string())
print('恭喜,发送给{}成功'.format(to_addr))
except smtplib.SMTPException as e:
print(e)
print('发送给{}失败,请重试'.format(to_addr))
server.quit() # 关闭服务器
def attach_picture(file_path, msg):
#上传图片
with open(file_path, 'rb')as image:
image_name = file_path.split('\\')[-1]
image_attach = MIMEImage(image.read())
image_attach.add_header('Content-Disposition', 'attachment', filename=Header(image_name, 'utf-8').encode())
msg.attach(image_attach)
return msg
def attach_other_file(file_path, msg):
#上传图片之外的其他文件
with open(file_path, 'rb')as file:
file_name = file_path.split('\\')[-1]
file_attach = MIMEApplication(file.read())
file_attach.add_header('Content-Disposition', 'attachment', filename=Header(file_name, 'utf-8').encode())
msg.attach(file_attach)
return msg
def login(from_addr, password, smtp_server, port):
if 'smtp.countrygarden.com.cn' == smtp_server:
server = smtplib.SMTP(smtp_server, port)
else:
server = smtplib.SMTP_SSL(smtp_server, port)
server.connect(smtp_server, port) # 服务器连接,服务器地址、接口
server.login(from_addr, password) # 登录发信邮箱
return server
if __name__ == '__main__':
from_addr = sys.argv[1]#发件人
password = sys.argv[2]#授权码
to_addr = sys.argv[3].split(',') # 收件人列表
subject = sys.argv[4] # 邮件主题
main_body = sys.argv[5] # 邮件正文
file_list = sys.argv[6] # 附件列表
for i in range(len(to_addr)):
send_email(from_addr, password,to_addr[i], subject, main_body, file_list)
应工作需求,将程序打包成exe程序方便调用,所以后面加入了sys模块,如果对这个没有需求的可以自行修改。下面讲一下如何将它打包成可调用的exe程序。
Pyinstaller
如果没有安装的需要安装一下:
pip install pyinstaller
然后进入脚本py文件所在路径,
然后输入命令 :PyInstaller -F 文件名.py
在文件列表中会出现好几个文件和文件夹,我们进入dist
文件夹就可以看到你想要的exe文件了。
由于我用的时anaconda中的虚拟环境,所以我进入cmd命令行后需要激活一下虚拟环境,这里大家看着自己的实际情况来输入就豪。
OK就分享到这儿,希望对你有所帮助。