隐秘邮,简单部署,邮件透明加密。网址:https://mail.tyyunan.com/

# -*- coding: utf-8 -*-

__version__ = '''Python-based smtp Client

Copyright (C) 2018 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@999.com 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@tyyunan.com",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@xxx.com',

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())

python程序收发文件_使用python脚本发送eml文件相关推荐

  1. 编写python程序的步骤_编写python程序和运行.py文件的方法步骤

    前提:已安装好 Subliume Test 3 且已经添加好python编译系统,已安装好python3.7 一.新建一个文本文档,将后缀名改为.py 二.使用 Subliume Test 3 打开该 ...

  2. python程序运行原理_谈谈 Python 程序的运行原理

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的 ...

  3. python程序调试题_关于python程序调试问题,一个文件计算的问题

    那位大神帮小弟看下这段代码有什么需要改进的没有.程序要求为:程序主要内容是:大地坐标经纬度的格式转换问题,例如120°30′30″转换为120.50833333°,并且可以互换,这样的程序.... 那 ...

  4. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

  5. 如何为python程序设置使用次数_提升Python程序性能的7个习惯

    Python不以性能见长,但掌握一些技巧,也可尽量提高程序性能,避免不必要的资源浪费. 1.使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中的 ...

  6. python程序如何循环_在Python的一段程序中如何使用多次事件循环详解

    背景 本文主要给大家介绍了关于在Python一段程序中使用多次事件循环的相关内容,我们在Python异步程序编写中经常要用到如下的结构 import asyncio async def doAsync ...

  7. python程序写诗_将Python诗歌与D结合起来

    在与docker一起使用poetry时,需要记住以下几点. 安装 安装poetry的正式方法是通过:curl -sSL https://raw.githubusercontent.com/sdispa ...

  8. python程序设置头像_利用python实现微信头像加红色数字功能

    通过Python实现将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 实现过程: 准备两张图片如下: 使用PIL图像处理库,导入moudle ...

  9. python程序员现状_天才Python程序员身价上亿却被说挫,6个月减90斤,逆袭成文艺范男神!...

    image 你对程序猿的印象是怎么样? 你所知道的程序员,是一种自嘲为码农的猿类 学习Python中有不明白推荐加入交流群 号:864573496 群里有志同道合的小伙伴,互帮互助, 群里有不错的视频 ...

  10. python程序写诗_用Python作诗,生活仍有诗和远方

    原标题:用Python作诗,生活仍有诗和远方 报 名 来源:TheodoreXu链接: https://segmentfault.com/a/1190000013154329 常听说,现在的代码,就和 ...

最新文章

  1. java实现七日股票问题_七日打卡--JAVA资源限制
  2. java制表位是什么意思_java制表位如何应用?大神进来。
  3. python逆序打印出各位数字_Python练习题 024:求位数及逆序打印
  4. 多模型融合(相当于投票)
  5. Windows Server 2008 R2远程设置选项灰色解决方法
  6. 【译】Thoughts and Goals on Qtum's x86 VM
  7. kotlin调用类中的方法_一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用
  8. 最火UI素材|短视频、直播APP套件,轻松搞定设计
  9. 夺命雷公狗---ECSHOP---01-解决报错问题
  10. JavaScript技巧写法
  11. python常用库大全文库_Python库参考手册
  12. adams c语言,Adams2013编译C语言用户子程序生成dll超详细教程讲解
  13. 【电子设计大赛】2017 年全国大学生电子设计竞赛 仪器和主要元器件清单
  14. Mysql定义DELETE操作触发器,将删除数据存入历史表
  15. 草莓 西瓜 柚子……
  16. 如何解决“Component ‘MSCOMCTLOCX‘ or one of its dependencies .....“
  17. redis.conf详解之replica-read-only
  18. 详解Unity的移动控制实现
  19. 寻找三角形 (海伦公式)
  20. My97DatePicker设置

热门文章

  1. Java学习之:如何将 java 程序打包成 .jar 文件
  2. u)dym)l$_@3*0y3u_pvy@34ky1co1j$lfd1wp-w*8x%30@f7t$
  3. 如何玩转淘宝直通车?提高转化率?
  4. java连接phoenix
  5. lempel ziv matlab,1.9 Lempel-Ziv算法
  6. python:实现Lempel-Ziv压缩算法(附完整源码)
  7. Pandoc安装与使用总结
  8. AI-WEB-1.0简单攻略
  9. 接入支付宝支付接口,以及SDK用法,Thinkphp6。
  10. VS 显示方法引用的设置方法