python接收邮件内容启动程序_编写python脚本接收邮件

Python是一个非常有趣的语言,拥有强大的类库,简单的语法,可以说使用python编写测试程序非常方便。近来研究邮件安全技术时编写了一个接收测试脚本,各位可根据自己的需要进行修改。这里推荐一款邮件透明加密产品,天御云安的隐秘邮。使用高强度加密技术,部署及其简单,不影响用户原来的使用习惯,客户完全感知不到,但是邮件传到服务器却加了密。网址: https://mail.tyyunan.com/

# coding=utf-8

import time

import poplib

import pickle

import email,string,sys,os

from email.header import Header

from email.header import decode_header

from time import strptime, strftime

from email.parser import Parser

import hashlib

import os

import difflib

file_dir = os.getcwd()

ISOTIMEFORMAT="%Y-%m-%d %X"

#定义邮件服务器常量

POP3Sever='192.168.11.22'

POP3User='xxxx@yyy.com'

POP3Password='123456'

def save_file(file_name,data):

try:

with open(file_name, 'wb') as fp:

fp.write(data)

except Exception as e:

print('save file error:[{0}]'.format(e))

raise

def save_file_diff(file_path,file_name,str_1,str_2):

try:

with open(file_name, 'wb') as fp:

fp.write(data)

except Exception as e:

print('save file error:[{0}]'.format(e))

raise

def writelog(log):

with open(file_dir+os.path.sep+'log.txt', 'a+') as fp:

fp.write(log+'\n')

def out_debug(file_name,info):

with open(file_name, 'a+') as fp:

fp.write('['+info+']\n')

def get_file_md5(filename):

if not os.path.isfile(filename):

return None

hash_data = hashlib.md5()

try:

with open(filename, 'rb') as fp:

while True:

data = fp.read(2)

if not data:break

hash_data.update(data)

except Exception as e:

print('read file error:[{0}]'.format(e))

raise

return hash_data.hexdigest()

def parse_mail(mail):

for part in mail.walk():

file_name = part.get_filename()

if not file_name:

continue

if part.get_content_maintype() == 'text':

file_path = os.path.join(os.path.dirname(file_dir),'smtp-client'+os.path.sep+'mail_text'+os.path.sep+file_name)

elif part.get_content_maintype() == 'application':

file_path = os.path.join(os.path.dirname(file_dir),'smtp-client'+os.path.sep+'mail_attach'+os.path.sep+file_name)

print(file_path)

old_md5 = get_file_md5(file_path)

file_path = file_dir+os.path.sep+'tmp_file'+os.path.sep+file_name

mail_data = part.get_payload(decode=True)

#print(mail_data)

save_file(file_path,mail_data)

new_md5 = get_file_md5(file_path)

print(file_path)

#os.remove(file_path)

try:

if new_md5.upper() == old_md5.upper():

print('new_md5==old_md5|file name is [%s]'%file_name)

print('new md5 is [%s] \nold md5 is [%s]\n'%(new_md5.upper(),old_md5.upper()))

continue

else:

print('new_md5!=old_md5|file name is [%s]'%file_name)

print('new md5 is [%s] \nold md5 is [%s]\n'%(new_md5.upper(),old_md5.upper()))

return False

except:

raise

print('---------------------------------------')

return True

def main():

t=time.strftime( ISOTIMEFORMAT, time.localtime())

success_num = 0

fail_num = 0

popClient=poplib.POP3_SSL(POP3Sever,"995")

#popClient=poplib.POP3(POP3Sever,"110")

popClient.set_debuglevel(1)

popClient.user(POP3User)

popClient.pass_(POP3Password)

numMsgs,mboxSize=popClient.stat()

print("numMsgs:[%d];mboxSize:[%d]\n"%(numMsgs,mboxSize))

resp, mails, octets = popClient.list()

for id in range (numMsgs):

hdr,message,octet=popClient.retr(id+1)

lists = []

for e in message:

try:

lists.append(e.decode('utf-8'))

except:

print("use other decode\n")

lists.append(e.decode('gb2312'))

mail = Parser().parsestr('\r\n'.join(lists))

if parse_mail(mail):

success_num += 1

popClient.dele( id+1 )

else:

fail_num += 1

#popClient.dele( id+1 )

writelog('success:%d fail:%d'% (success_num, fail_num) )

#break

#writelog('success:%d fail:%d'% (success_num, fail_num) )

t=time.strftime( ISOTIMEFORMAT, time.localtime())

writelog('----------------popClient.quit---------------------now time is[%s]'%t)

popClient.quit()

if __name__ == '__main__':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值