隐秘邮,简单部署,邮件透明加密。网址:/
# -*- coding: utf-8 -*-
__version__ = '''Python-based smtp Client
Copyright (C) Chunyu Cao
This is free software; see LICENSE file for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
'''
# py .\smtp_client.py 192.168.61.4 25 c1@ 123456 recv_name --send_num 1
import time
import random
import json
import smtplib
import os
import argparse
import base64
from urllib import request
from urllib import error
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email import encoders
from email.message import Message
from email.charset import Charset
from email.charset import QP
from email.charset import BASE64
from email.charset import SHORTEST
files_list = ['x1_c2.eml']
def save_file(file_name,data):
try:
with open(file_name, 'w') as fp:
fp.write(data)
except Exception as e:
print('save file error:[{0}]'.format(e))
raise
class SmtpClient:
def __init__(self,args,file_path,file_name):
self.args = args
smtplib.Debug = args.debug
self.recv_name = []
with open(file_path+os.path.sep+args.recv_name_file, 'rb') as fp:
data = fp.read().decode('utf-8').split(',')
for i in data:self.recv_name.append(i.strip())
with open(os.path.join(os.path.dirname(file_path),'test_mail'+os.path.sep+file_name)) as fp:
self.msg = fp.read()
def send_mail(self):
try:
self.smtp.sendmail(self.args.user_name,self.recv_name,self.msg)
#self.smtp.sendmail(self.args.user_name,"caochunyu@",self.msg.as_string())
#print(self.msg.as_string())
#save_file(os.getcwd()+os.path.sep+'tmp_file'+os.path.sep+'tmp.eml',self.msg.as_string())
print('mail send Success!')
except Exception as e:
print('mail send fail! Error!')
raise
def login(self):
try:
if self.args.ssl:
self.smtp = smtplib.SMTP_SSL()
else:
self.smtp = smtplib.SMTP()
self.smtp.connect(self.args.host,self.args.port)
self.smtp.login(self.args.user_name,self.args.user_pass)
except Exception as e:
print('login fail! Error:'+str(e))
raise
def logout(self):
try:
self.smtp.close()
except Exception as e:
print('logout fail! Error:'+str(e))
raise
def main(args):
print(args)
file_dir = os.getcwd()
send_num = args.send_num
while send_num > 0:
random_mail = files_list[random.randint(0, len(files_list)-1)]
mail_client = SmtpClient(args,file_dir,random_mail)
mail_client.login()
mail_client.send_mail()
mail_client.logout()
send_num -= 1
print('remain mail num is [{0}]'.format(send_num))
time.sleep(1)
if __name__ == '__main__':
args = argparse.ArgumentParser( __version__)
args.add_argument('host', default='localhost',
help='mail server hostanme')
args.add_argument('port', default=25,type=int,
help='server port')
args.add_argument('user_name', default='xxx@',
help='user name')
args.add_argument('user_pass', default='123456',
help='user pass')
args.add_argument('recv_name_file', default='recv_name',
help='recv name')
args.add_argument('--send_num',default=1,type=int,
help='mail send num')
args.add_argument('--ssl', action='store_true',
help='Use SSL')
args.add_argument('--debug', type=int,
help='Debug level 1-5')
args.add_argument('--verbose', action='store_true', default=False,
help='Disable verbose mode')
main(args.parse_args())