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

参考:

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

python 复制代码
# -*- 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%

相关推荐
এ慕ོ冬℘゜13 小时前
Git 基础入门|和 SVN 对比 + 四大区域 + 常用命令详解
git·svn
阿萨德528号9 天前
IDEA 项目 SVN 配置消失、版本控制变成 Git 且无 VCS 菜单的解决办法
git·svn·intellij-idea
天府云创13 天前
Anthropic重做Git:Scion——Agent时代的版本管理系统
git·svn·版本控制·软件设计·迭代升级·scion
爱吃辣椒的小豆豆13 天前
Apache 日志轮转触发 SVN 更新异常
svn·apache
鶴哥只手遮天14 天前
Apache Subversion 1.15 源码深度剖析-第 3 章 文件系统层(FS 抽象与 FSFS 后端)
svn·开源
鶴哥只手遮天14 天前
Apache Subversion 1.15 源码深度剖析-第 6 章 工作副本:WC-NG 与 pristineless
svn·开源
解道Jdon16 天前
FigCraft把Figma用Rust从零重写了一遍
ide·windows·git·svn·eclipse·github·visual studio
Peter(阿斯拉)23 天前
[macOS Tahoe 26]_[使用SmartSVN访问库路径报错的问题]
macos·svn·tahoe·smartsvn·macos26
inferno25 天前
SVN学习笔记(二)
笔记·学习·svn
inferno1 个月前
SVN服务端下载、安装与配置(Windows版)
svn