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

news2024/11/27 2:55:01

参考:

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 Header
 
mail_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 output
 
def 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 output
 
def 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 output
 
def 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 output
 
def 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 True
	except Exception, e:
			print str(e)
			return False
 
def write_mail(sender, to_list, sub, content):
	msg = MIMEText(content, _subtype = 'html', _charset='utf-8')
	#msg = MIMEText('如果我不设置msg to这里怎么显示?', 'plain', 'utf-8')
	msg['Subject'] = sub
	msg['From'] = sender
	msg['To'] = ';'.join(to_list)
	msg["Accept-Language"]="zh-CN"
	msg["Accept-Charset"]="ISO-8859-1,utf-8"
	return msg
		
		
global svnlook_bin_path
 
def write_mail_content(repo, rev):
	"""
	repo: repository
	rev: revision
	"""
	repo_name = get_repo_name(repo)
	#repo_name = repo
	author = 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 content

if __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.coloradmin.cn/o/1432940.html

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

相关文章

【RPA】什么是RPA

一、什么是RPA? RPA&#xff0c;全称机器人流程自动化&#xff0c;是一种利用机器人技术实现工作信息与业务交互自动化的过程。它能够按照预先设计的流程&#xff0c;高效地处理大量的工作信息与业务交互&#xff0c;极大地节约了人工成本。如今&#xff0c;RPA已成为智能化软…

26.云原生ArgoCD高级之ApplicationSet

云原生专栏大纲 文章目录 ApplicationSet介绍ApplicationSet 特性ApplicationSet 安装ApplicationSet 工作原理ApplicationSet 生成器列表类型生成器集群生成器基础使用方法Label Selector 指定集群Values 字段传递额外的参数 git生成器git目录生成参数排除目录git文件生成器矩…

zabbix server/agent源码编译成rpm包(通用版-小白教程)

前言 工作环境需要用到很多信创的操作系统&#xff0c;zabbix agent2的官方没有现成的包可用&#xff0c;网上巴拉了一下找到zabbix agent2通用版编译成rpm包的方法 思路&#xff1a;假如当你有一批ky10_x86的机器需要配套的zabbix agent的rpm包&#xff0c;那就找一台ky10_x…

6个国内可用的chat大模型

文心一言 - 一款适合中国人使用的AI智能助理&#xff0c;能够帮助用户进行对话、生成内容等工作&#xff0c;提高工作效率和创作水平 文心一言 文心一言 App 是一款适合中国人的 AI 智能助理&#xff0c;它的功能点主要包括&#xff1a; 工作生活助理&#xff1a;该应用通过简…

鉴权失败原因

在技术领域&#xff0c;鉴权失败是指一个系统或应用程序中的身份验证或权限验证过程失败。当用户试图访问受限资源或执行受限操作时&#xff0c;系统会进行鉴权过程来确认用户是否具有足够的权限。如果鉴权过程失败&#xff0c;则表示用户无法获得所需的访问权限。 鉴权失败可…

Java代码实现基数排序算法(附带源码)

基数排序是一种非比较型整数排序算法&#xff0c;其原理是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。由于整数也可以表达字符串&#xff08;比如名字或日期&#xff09;和特定格式的浮点数&#xff0c;所以基数排序也不是只能使用于整数。 1. 基数排序…

基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的兼职网&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

ubuntu离线安装k8s

目录 一、前期准备 二、安装前配置 三、安装docker 四、安装cri-dockerd 五、部署k8s master节点 六、整合kubectl与cri-dockerd 七、网络等插件安装 八、常见问题及解决方法 一、前期准备 ①ubuntu系统 本地已安装ubuntu系统&#xff0c;lsb_release -a命令查看版本信…

HarmonyOS应用/服务发布:打造多设备生态的关键一步

目前 前言HarmonyOS 应用/服务发布的重要性使用HarmonyOS 构建跨设备的应用生态前期准备工作简述发布流程生成签名文件配置签名信息编译构建.app文件上架.app文件到AGC结束语 前言 随着智能设备的快速普及和多样化&#xff0c;以及编程语言的迅猛发展&#xff0c;构建一个无缝…

打印文件pdf怎么转换成word文档?pdf转换工具推荐

有时候我们可能需要重用PDF文件中的文本内容&#xff0c;比如引用某些段落、复制粘贴特定文字或提取数据&#xff0c;通过将pdf文件转换成word&#xff0c;可以轻松地提取和重用其中的文本&#xff0c;节省时间和努力&#xff0c;那么pdf怎么转word呢&#xff1f;可以试试本文推…

读论文:DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior

DiffBIR 发表于2023年的ICCV&#xff0c;是一种基于生成扩散先验的盲图像恢复模型。它通过两个阶段的处理来去除图像的退化&#xff0c;并细化图像的细节。DiffBIR 的优势在于提供高质量的图像恢复结果&#xff0c;并且具有灵活的参数设置&#xff0c;可以在保真度和质量之间进…

SpringBoot实战第二天

今日战报 继续完善用户相关接口开发&#xff1a; 1.完成获取用户信息功能 2.完成更新用户信息功能 3.完成更新用户头像功能 4.完成更新用户密码功能 获取用户信息 接口文档 如接口文档所示&#xff0c;我们需要做的就是从header中的Authorization中读取token&#xff0c;解码…

CSS 闪电按钮效果

<template><view class="const"><div class="voltage-button"><button>闪电按钮</button><svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox=&q…

PyTorch 2.2 中文官方教程(十七)

&#xff08;Beta&#xff09;使用缩放点积注意力&#xff08;SDPA&#xff09;实现高性能 Transformer 原文&#xff1a;pytorch.org/tutorials/intermediate/scaled_dot_product_attention_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 注意 点击这…

Flutter开发iOS问题记录

一、版本适配问题 warning: The iOS deployment target ‘IPHONEOS_DEPLOYMENT_TARGET’ is set to 10.0, but the range of supported deployment target versions is 12.0 to 17.2.99. (in target ‘Protobuf’ from project ‘Pods’) 可以通过在podfile中配置解决。 pos…

小埋的解密游戏的题解

题目描述 小埋最近在玩一个解密游戏&#xff0c;这个游戏的解密方法是这样的&#xff0c;这个游戏会给你提供 个数,让我们求出这 个数里面&#xff0c;有多少个连续的数的平均数大于某个给定的数 。这个数可能会很大&#xff0c;所以我们要输出这个数对 的取模结果。现在小…

Java并发之synchronized详解

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

使用Java实现基于HTTP的分布式系统:让你的应用“四处开花”

在数字世界里&#xff0c;分布式系统就像是一个大家庭&#xff0c;每个成员&#xff08;即节点&#xff09;都有自己的任务和职责&#xff0c;共同维护整个家庭的运转。如果你想使用Java来实现这样一个大家庭&#xff0c;让应用在各个节点上“四处开花”&#xff0c;那就需要借…

ensp实验合集(二)

实验6 VLAN划分....................................................................... - 30 - 实验7 路由器调试及常用命令使用........................................ - 42 - 实验8 配置静态路由器............................................................…

DevOps落地笔记-13|自动化测试:提高测试效率的不二之选

上一课时主要介绍了通过 API 管理平台来管理企业内部的 API。持续集成是能够保证软件处于可工作状态的实践&#xff0c;但实施持续集成有一个必不可少的步骤——测试。只有尽可能全面的测试覆盖&#xff0c;才能降低软件出错的概率。但是&#xff0c;大多数企业里还是基于人工来…