刘总的笔记小站

生活常识,娱乐搞笑,编程技巧,智能家居,深度学习,网络神经,数据挖掘

python邮件收发excel和ini及json读写

1,问题背景

#如何接收邮件,分类定制,邮件转发
#假如客户小张有这么一个工作,每天要从公司邮件系统下载邮件(来自于国家局通知邮件),
#然后分类邮件通知,然后再按照不同的归属,把邮件转发给不同的客户。甚是繁琐,可自动化。


2,开发核算

开发流程:需求分析,详细设计,设计评审,代码开发,代码评审,测试用例,软件部署,附加测试(稳定性,压力,边界值)

#自动化思路:接收邮件(依赖接口)--->分类定制(依赖表单)--->发送邮件
#预计工作量:10day(simple,without UI),标量计算:500?/50行代码量/平均每人天,熟人可打折


3,邮件协议

#SMTP协议SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议, 源地址到目的地址传送邮件的规则,
#由它来控制信件的中转方式。SMTP协议属于TCP / IP协议簇, SMTP协议可以把E - mail寄到指定的服务器
#POP是指邮局协议,目的是让用户可以访问邮箱服务器中的邮件,允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,
#同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
#后来又出现了IMAP协议(Interactive Mail Access Protocol), 即交互式邮件访问协议,
# 与POP3的不同在于:开启了IMAP后,#在电子邮件客户端收取的邮件仍然保留在服务器上,客户端上的操作都会反馈到服务器上。


4,自动邮件收发示例代码

import os
import sys
import logging
import traceback

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

#https://www.liaoxuefeng.com/wiki Python 2.7
import poplib
def recv_mail(server, username, password):
    pop3_server = server
    email = username
    password = password
    server = poplib.POP3(pop3_server)
    # server.set_debuglevel(1)
    print(server.getwelcome())
    server.user(email)
    server.pass_(password)
    print('Messages: %s. Size: %s' % server.stat())
    resp, mails, octets = server.list() #all mail num
    print(mails)
    index = len(mails) #index from 1
    resp, lines, octets = server.retr(index)
    msg_content = '\r\n'.join(lines)
    #msg = Parser().parsestr(msg_content)
    server.quit()

import getpass, imaplib
def recv_mail_imap():
    M = imaplib.IMAP4()
    M.login(getpass.getuser(), getpass.getpass())
    M.select()
    typ, data = M.search(None, 'ALL')
    for num in data[0].split():
        typ, data = M.fetch(num, '(RFC822)')
        print 'Message %s\n%s\n' % (num, data[0][1])
    M.close()
    M.logout()

import smtplib
def send_email(server, fromAddr, togoAddr, subject, msg, password):
    server = smtplib.SMTP('localhost') # stmp defualt port 25
    server.set_debuglevel(1)
    message = ("From: %s\r\nTo: %s\r\n"% (fromAddr, togoAddr))
    message = ("Subject: %s\r\nContent: %s\r\n"% (subject, msg))
    server.sendmail(fromAddr, list(togoAddr), message)
    server.quit()

    from email.mime.text import MIMEText
    msg = MIMEText("mail", 'html', 'utf-8')
    msg['From'] = u'<%s>' % fromAddr
    msg['To'] = u'<%s>' % togoAddr
    msg['Subject'] = subject

    smtp = smtplib.SMTP_SSL('smtp.xxx.com', 465) # smtplib.SMTP(server, 25)
    smtp.set_debuglevel(1)
    smtp.ehlo("smtp.xxx.com")
    smtp.login(fromAddr, password)
    smtp.sendmail(fromAddr, [togoAddr], msg.as_string())
    smtp.quit()


def main(argv):
    try:
    #接收邮件 #分类邮件 #发送邮件
    except:
        print(traceback.format_exc())
    return True

if __name__ == '__main__':
    if (True == main(sys.argv)):
        print("SUCCESS")
    else:
        print("FAILURE")


5,自动excel表格读写示例代码:

import os
import sys

import xlwt
import xlrd

print(sys.path)

print(xlwt.__VERSION__)
workbook = xlwt.Workbook()
name_sheet1 = workbook.add_sheet('sheet1')
name_sheet1.write(0, 0, 123.456)
workbook.save('example.xls')

print(xlrd.info.__VERSION__)
workbook = xlrd.open_workbook('example.xls')
name_sheets = workbook.sheet_names()
name_sheet1 = workbook.sheet_by_index(0)
name_sheet1 = workbook.sheet_by_name('sheet1')
print(name_sheet1.cell(0, 0).value)
print(name_sheet1.cell(0, 0).ctype)
print('ctype: 0empty 1string 2number 3date 4boolean 5error')


#https://pypi.python.org/simple/xlrd/
#https://pypi.org/simple/xlrd/
#https://pypi.python.org/simple/xlwt/
#https://pypi.org/simple/xlwt/


6,读取ini配置文件和json文件

import os
import sys
import time
import traceback
import json
import ConfigParser

# ConfigParser class : RawConfigParser, ConfigParser, SafeConfigParser
# ConfigParser、SafeConfigParser support %(value)s parser use var value

class iniConfigParser(ConfigParser.ConfigParser):
    def __init__(self, defaults=None):
        ConfigParser.ConfigParser.__init__(self, defaults=defaults)

    def optionxform(self, optionstr):
        return optionstr

iniConfig = iniConfigParser()

curFile = os.path.basename(os.path.abspath(__file__))
absPath = os.path.dirname(os.path.abspath(__file__))
print(curFile)
print(absPath)

#write config.ini
iniConfig.add_section('book')
iniConfig.set("book","Author","and")
iniConfig.set("book","Version","one")
iniConfig.add_section('food')
iniConfig.set("food","Dinner","eat")

iniConfig.write(sys.stdout)
iniConfig.write(open(os.path.join(absPath, 'config.ini'), 'w'))

#read config.ini
iniConfig.read(os.path.join(absPath, 'config.ini'))
sectionsList = iniConfig.sections()
sectionkeysList =  iniConfig.options(sectionsList[0])
sectionkeyValList =  iniConfig.items(sectionsList[0])
print(sectionsList)
print(sectionkeysList)
print(sectionkeyValList)
print(os.listdir(absPath))

#read package.json
jsonStrs = '{"key":"val"}'
jsonDict = json.loads(jsonStrs)
jsonDictRd = json.load(open(os.path.join(absPath, 'package.json'), 'r'))
print(jsonDict)
print(jsonDictRd)

#write package.json
jsonDict = {'key':'val'}
jsonStrs = json.dumps(jsonDict)
jsonDictRd['time'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
json.dump(jsonDictRd, open(os.path.join(absPath, 'package.json'), 'w'))

print(jsonStrs)


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
搜索
«   2024年9月   »
1
2345678
9101112131415
16171819202122
23242526272829
30
网站分类
最新留言
文章归档
网站收藏
友情链接
图标汇集
Powered by Z-BlogPHP

  • Copyright ©2021 @liuzong All rights reserved.
  • 陕ICP备17016542号