配置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属性…

记录分享Spring Boot集成MQTT(配有简单实现示例)

Spring Boot集成MQTT是一个相对复杂的过程&#xff0c;需要涉及到多个步骤和配置。以下是一个详细的集成文档&#xff0c;包括操作步骤和简单的示例。 一、背景介绍 MQTT是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网领域。Spring Boot是一个快速构建Spr…

vscode的vetur文档格式化失效

如果vscode安装了vetur插件之后&#xff0c;shiftAltF又无法格式化vue文件代码。 解决办法&#xff1a;打开文件 ---> 首选项 ---> 设置&#xff0c;搜索 vetur.format.defaultFormatter.html后将prettier替换勾选为js-beautify-html 注&#xff1a;设置下划线了并可以在…

常见Web前端开发框架推荐

在当今的Web开发领域&#xff0c;前端开发框架扮演着越来越重要的角色。它们不仅简化了开发过程&#xff0c;提高了开发效率&#xff0c;而且为开发者提供了丰富的特性和工具&#xff0c;使得创建复杂、高效的Web应用成为可能。以下是一些常见的Web前端开发框架&#xff0c;以及…

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. 修改用户连…

ThinkPHP6进阶教程:如何优雅地使用Auth模块进行权限验证

thinkphp6是一款优秀的php框架&#xff0c;它为我们提供了很多高效的工具和功能。其中&#xff0c;auth授权是一个非常强大的功能&#xff0c;可以帮助我们在应用程序中进行权限管理。本文将介绍如何使用thinkphp6的auth授权。 安装Auth组件 首先&#xff0c;我们需要安装Aut…

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

行为型模式用于描述程序在运行时复杂的流程控制&#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…

Adobe Illustrator CEP插件开发入门指南

引言 Adobe Creative Cloud&#xff08;创意云&#xff09;中的Illustrator作为一款全球领先的矢量图形设计软件&#xff0c;为设计师提供了丰富的功能和无限的创作可能性。为了进一步增强其功能并满足个性化工作流程需求&#xff0c;Adobe引入了Common Extensibility Platform…

【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;如何提高运营的效率和质量、保证产品及服务的良…

2.4学习总结

2.4 1.不相交的线 2.最⼤⼦序和 3.判断⼦序列 4.不同的子序列 5.编辑距离 6.零的数列 Zero Sum 7.迷宫与陷阱 https://leetcode.cn/problems/uncrossed-lines/description/ 还是找最长公共子序列的问题 class Solution { public:int maxUncrossedLines(vector<int>&am…