配置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%

相关推荐
rain bye bye7 天前
SVN ? ! 的解决
svn
weixin_7714323117 天前
SVN 主分支合并之通过主分支合并子分支操作流程
svn
gihigo199815 天前
在CentOS上配置SVN至Web目录的自动同步
前端·svn·centos
程序员瓜叔1 个月前
基于SVN搭建企业内部知识库系统实践
svn·centos
huhy~1 个月前
基于Centos7.9搭建svn服务端
svn
高旭的旭1 个月前
Gitlab 配置自定义 clone 地址
svn·ssh·gitlab·code
白帽小野1 个月前
SVN和Git两种版本管理系统对比
git·svn·版本控制系统
闲人一小枚1 个月前
mac Monterey 安装svn(已解决)
macos·svn
Jsy0509062 个月前
dvcs-ripper ---CTFHub技能树: SVN泄露
svn·小白·网安·信息搜集
长沙红胖子Qt2 个月前
关于 svn无法查看下拉日志提示“要离线”和根目录看日志“no data” 的解决方法
svn·离线·nodata·日志查看失败