配置visualsvn提交后自动邮件通知

参考:

https://blog.csdn.net/wiker_yong/article/details/10334967

# -*- coding: utf-8 -*-
import sys
import os
import smtplib
from email.mime.text import MIMEText
from email.header import Headermail_host = 'smtp.163.com' #发送邮件的smtp地址
mail_user = 'xxx@163.com' # 发送通知邮件的用户名
mail_pass = 'xxx' # 用户的密码,stmp的授权码,不同的邮件服务商不一样,可以不是邮件登陆密码
#me = 'SVN Service' + '' + '' + '@' + 'qq.com' + '' #发送邮件人的地址标识
me = 'xxx@163.com'
to_list = ['aaa@qq.com','bbb@qq.com'] # 收件人 如果是多个收件人,加入到这里面来。
html_template = """
<html><h2 style="color:#FFFFFF; background: #008040;">基本信息</h2><div> <b>版本库:</b><a href="svn:%s">%s</a></div><div> <b>版本号:</b>%s</div><div><b>提交者:</b>%s</div><div><b>提交时间:</b>%s</div><h2 style="color:#FFFFFF; background: #4682B4;">提交说明</h2> <font size="4" color="#BF6000"><xmp>%s</xmp></font><h2 style="color:#FFFFFF; background: #5353A8;">文件清单</h2><xmp>%s</xmp><hr><center>☆ Powered by<a href="">louis</a></center><center>☆ Inspired by<a href="http://crearo-sw.blogspot.com">CREARO-SW</a></center>
</html>
"""def get_repo_name(repo):return os.path.basename(repo)def get_author(repo, rev):"""svnlook author -r REV REPOS 获得提交者"""cmd = '%s author -r %s %s' % (svnlook_bin_path, rev, repo)print(cmd)output = os.popen(cmd).read()print(output)return outputdef get_date(repo, rev):"""svnlook date -r REV REPOS 获得提交时间"""cmd = '%s date -r %s %s' % (svnlook_bin_path, rev, repo)print(cmd)output = os.popen(cmd).read()print(output)return outputdef get_log(repo, rev):"""svnlook log -r REV REPOS 获得提交日志"""cmd = '%s log -r %s %s' % (svnlook_bin_path, rev, repo)output = os.popen(cmd).read()return outputdef get_file_list(repo, rev):"""svnlook changed -r REV REPOS 获得发生变更的文件"""cmd = '%s changed -r %s %s' % (svnlook_bin_path, rev, repo)output = os.popen(cmd).read()return outputdef send_mail(msg, sender, to_list):try:s = smtplib.SMTP()s.connect(mail_host)s.login(mail_user,mail_pass)s.sendmail(sender, to_list, msg.as_string())s.close()return Trueexcept Exception, e:print str(e)return Falsedef write_mail(sender, to_list, sub, content):msg = MIMEText(content, _subtype = 'html', _charset='utf-8')#msg = MIMEText('如果我不设置msg to这里怎么显示?', 'plain', 'utf-8')msg['Subject'] = submsg['From'] = sendermsg['To'] = ';'.join(to_list)msg["Accept-Language"]="zh-CN"msg["Accept-Charset"]="ISO-8859-1,utf-8"return msgglobal svnlook_bin_pathdef write_mail_content(repo, rev):"""repo: repositoryrev: revision"""repo_name = get_repo_name(repo)#repo_name = repoauthor = get_author(repo, rev)date = get_date(repo, rev)log = get_log(repo, rev)file_list = get_file_list(repo, rev)content = html_template % (repo, repo_name, rev, author, date.decode("GBK").encode('UTF-8'), log.decode("GBK").encode('UTF-8'), file_list.decode("GBK").encode('UTF-8'))print(content)return contentif __name__ == '__main__':#这个地方我把path的绝对路径修改成相对路径了。而且这个exe应该已经添加到了系统path了。svnlook_bin_path = 'svnlook.exe'subject = 'SVN Commit Notification'#content = write_mail_content(sys.argv[1], sys.argv[2])content = write_mail_content(sys.argv[1], sys.argv[2])msg = write_mail(me, to_list, subject, content)#msg = write_mail(me, to_list, subject, 'teset')send_mail(msg, me, to_list)

svn这一侧的配置

rem REPOS-PATH (the path to this repository)

set REPOS=%1

rem REV (the number of the revision just committed)

set REV=%2


set HOOK_DIR=D:/Repositories/DMR-320-Dc320-2BD/hooks

set PYTHON_BIN=C:/Python27/python.exe

%PYTHON_BIN% %HOOK_DIR%/sendEmail.py %REPOS% %REV%
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS第二天、原型、原型链、正则

☆☆☆☆ 什么是原型&#xff1f; 构造函数的prototype 就是原型 专门保存所有子对象共有属性和方法的对象一个对象的原型就是它的构造函数的prototype属性的值。prototype是哪来的&#xff1f;所有的函数都有一个prototype属性当函数被创建的时候&#xff0c;prototype属性…

Lightroom Classic 2024 --- LR2024

Lightroom Classic 2024是一款专业的图片编辑和照片管理软件&#xff0c;旨在帮助摄影师高效地处理、编辑和展示他们的作品。通过强大的组织工具&#xff0c;用户可以轻松地管理、搜索和筛选大量的照片。该软件提供了全面的编辑工具&#xff0c;包括调整颜色、曝光、对比度、白…

Linux网络通信——TCP/OSI七层模型/TCP/IP(五层或四层模型)/HTTP报文传输原理

文章目录 消息的传输什么是OSI七层模型OSI七层模型的内容物理层&#xff08;Physical Layer&#xff09;&#xff1a;数据链路层&#xff08;Data Link Layer&#xff09;&#xff1a;网络层&#xff08;Network Layer&#xff09;&#xff1a;传输层&#xff08;Transport Lay…

On the Spectral Bias of Neural Networks论文阅读

1. 摘要 众所周知&#xff0c;过度参数化的深度神经网络(DNNs)是一种表达能力极强的函数&#xff0c;它甚至可以以100%的训练精度记忆随机数据。这就提出了一个问题&#xff0c;为什么他们不能轻易地对真实数据进行拟合呢。为了回答这个问题&#xff0c;研究人员使用傅里叶分析…

Oracle12c之Sqlplus命令行窗口基本使用

Oracle12c之Sqlplus命令行窗口基本使用 文章目录 Oracle12c之Sqlplus命令行窗口基本使用1. 连接1. 超级用户2. 普通用户1. 创建普通用2. 连接 2. 修改用户连接数1. 查看默认连接最多用户数1. PL/SQL developer中查看2. Sqlplus中查看 2. 查看目前已经连接的用户数3. 修改用户连…

设计模式-行为型模式(上)

行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制来在类间分派行为&…

Docker 搭建mysql 集群(二)

PXC方案 很明显 PXC方案在任何一个节点写入的数据都会同步到其他节点&#xff0c;数据双向同步的&#xff08;在任何节点上都可以同时读写&#xff09; 创建MySQL PXC集群 1 安装PXC镜像 docker pull percona/percona-xtradb-cluster:5.7.21 2 为PXC镜像改名 docker tag pe…

如何选择旅游路线,使得假期旅游路费最少?

旅行是许多人的热爱&#xff0c;但是在规划一个完美的假期时&#xff0c;找到最经济的路线常常是一个挑战。这里就需要引入一个著名的优化问题——旅行商问题。本文将介绍TSP的基础知识&#xff0c;并使用MTZ消除子环方法优化一个简单的TSP问题的示例。 旅行商问题简介 TSP&a…

用友U8 Cloud ReportDetailDataQuery SQL注入漏洞复现(QVD-2023-47860)

0x01 产品简介 用友U8 Cloud 提供企业级云ERP整体解决方案,全面支持多组织业务协同,实现企业互联网资源连接。 U8 Cloud 亦是亚太地区成长型企业最广泛采用的云解决方案。 0x02 漏洞概述 用友U8 cloud ReportDetailDataQuery 接口处存在SQL注入漏洞,攻击者未经授权可以访…

自然语言nlp学习五

6-10 文本生成--介绍_哔哩哔哩_bilibili 在自然语言处理&#xff08;NLP, Natural Language Processing&#xff09;领域&#xff0c;“sequence”通常是指一个有序的数据集合&#xff0c;它由一系列元素按照特定顺序排列而成。这些元素可以是单词、字符、句子或其他文本单位。…

NLP_语言模型的雏形N-Gram

文章目录 N-Gram 模型1.将给定的文本分割成连续的N个词的组合(N-Gram)2.统计每个N-Gram在文本中出现的次数&#xff0c;也就是词频3.为了得到一个词在给定上下文中出现的概率&#xff0c;我们可以利用条件概率公式计算。具体来讲&#xff0c;就是计算给定前N-1个词时&#xff0…

【ROS机器人系统】实验1 熟悉ROS操作系统、熟悉ROS通信架构

文章目录 实验1 熟悉ROS操作系统、熟悉ROS通信架构1、实验目的2、实验设备3、实验内容3.1 安装ROS3.2 ROS常用指令以及小海龟示例roscore命令rosrun命令rosnode 命令roscd 命令rostopic 命令 动手实现1&#xff1a;rosservice 命令roslaunch 命令 动手实现2&#xff1a;动手实现…

免费代理IP的弊端有哪些?使用代理IP前要这样哪些事项?

随着互联网的普及&#xff0c;越来越多的人开始需要使用代理IP来保护自己的隐私或突破网络限制。然而&#xff0c;免费代理IP并非完美的解决方案&#xff0c;它们也存在一些弊端。在本文中&#xff0c;我们将探讨免费代理IP的弊端以及使用代理IP前需要注意的事项。 免费代理IP的…

如何使用第三方API采集电商数据呢?

电商商家最常唠叨的就是店铺运营难做。每日多平台店铺数据统计汇总繁琐耗时&#xff0c;人工效率偏低&#xff0c;且工作内容有限。 特别是眼下“618&#xff0c;双十一&#xff0c;双十二&#xff0c;年底大促”将至&#xff0c;如何提高运营的效率和质量、保证产品及服务的良…

算法学习——华为机考题库9(HJ56 - HJ63)

算法学习——华为机考题库9&#xff08;HJ56 - HJ63&#xff09; HJ56 完全数计算 描述 完全数&#xff08;Perfect number&#xff09;&#xff0c;又称完美数或完备数&#xff0c;是一些特殊的自然数。 它所有的真因子&#xff08;即除了自身以外的约数&#xff09;的和&…

C# CAD界面-自定义工具栏(二)

运行环境 vs2022 c# cad2016 调试成功 一、引用 acdbmgd.dllacmgd.dllaccoremgd.dllAutodesk.AutoCAD.Interop.Common.dllAutodesk.AutoCAD.Interop.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.T…

【pwn】pwnable_start --只有read和write函数的getshell

首先查一下程序的保护情况 保护全关&#xff01;&#xff01;&#xff01; 然后看ida逻辑 ida的结果很简洁&#xff0c;只有一段汇编代码&#xff0c;我们再来看看nc情况 现在我们来分析一下汇编代码 mov ecx, esp ; addr .text:08048089 B2 14 …

Fink CDC数据同步(六)数据入湖Hudi

数据入湖Hudi Apache Hudi(简称&#xff1a;Hudi)使得您能在hadoop兼容的存储之上存储大量数据&#xff0c;同时它还提供两种原语&#xff0c;使得除了经典的批处理之外&#xff0c;还可以在数据湖上进行流处理。这两种原语分别是&#xff1a; Update/Delete记录&#xff1a;H…

LLaVA:GPT-4V(ision) 的新开源替代品

LLaVA&#xff1a;GPT-4V(ision) 的新开源替代品。 LLaVA &#xff08;https://llava-vl.github.io/&#xff0c;是 Large Language 和Visual A ssistant的缩写&#xff09;。它是一种很有前景的开源生成式 AI 模型&#xff0c;它复制了 OpenAI GPT-4 在与图像对话方面的一些功…

arping交叉编译

arping命令依赖libpcap和libnet&#xff0c;需要先交叉编译这两个库。 1.交叉编译libpcap 下载libpcap源文件&#xff0c;从github上克隆: git clone https://github.com/the-tcpdump-group/libpcap.git source交叉编译环境 # environment-setup是本机的交叉编译环境, 里面…