svn邮件通知

Svn添加邮件通知

 

       以前一直都是用svn提交代码的,可是团队一旦壮大,svn库里就一堆代码,都不知道谁提交的,也不知道什么时候提交的(当然可以用svn的show  log来看,但始终不能时时刻刻的知道和监控工作代码有提交没)。为此上网研究了一段时间,其次测试并使用了。

       下面说的都是在windows 7系统下的,因为团队问题,所以暂时用windows系统。首先我们要部署好windows7 + svn + apache 环境,这个上篇文章已经说过,这里就省略了。

       现在开始部署:

1、  需要一个能用stmp发邮件的邮箱。这里我是用腾讯的免费企业邮箱,申请后把腾讯的mx记录添加到自己的域名mx记录里。具体操作可以看腾讯企业邮箱mx添加的操作,http://service.exmail.qq.com/cgi-bin/help?subtype=1&id=20012&no=1000569


2、  在svn服务器上安装python2.7https://www.python.org/downloads/

3、  接下来在svn服务器,进入svn库的hooks文件夹F:\svn_server\MyProject\MyProject\hooks,创建文件post-commit.bat,内容:

 

remREPOS-PATH (the path to this repository)

setREPOS=%1

remREV (the number of the revision just committed)

setREV=%2

 

setHOOK_DIR=F:/svn_server/MyProject/MyProject/hooks

setPYTHON_BIN=C:/Python27/python.exe

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

 

 

4、  然后再在hooks目录下,创建文件sendemail.py,内容:

 

#coding:utf-8

importsys

importos

importsmtplib

fromemail.mime.text import MIMEText

fromemail.header import Header

 

mail_host= 'smtp.exmail.qq.com' #发送邮件的smtp地址

mail_user= 'svn@ladyson.net' # 发送通知邮件的用户名

mail_pass= 'abc123' # 用户的密码

me= 'SVN Service' + '<' + 'svn' + '@' + 'ladyson.net' + '>' #发送邮件人的地址标识

to_list= ['123456789@qq.com','123456@qq.com'] # 收件人

 

html_template= """

<divstyle="color:#FFFFFF; background: #008040;text-align: center;font:bold18px/28px '微软雅黑';margin:10px 0px;">基本信息</div>

<divstyle="font:normal 14px/28px '微软雅黑';margin:0px;text-indent:10px;"><strong>版本库:</strong><ahref="svn:%s" target="_parent">%s</a></div>

<divstyle="font:normal 14px/28px '微软雅黑';margin:0px;text-indent:10px;"><strong>版本号:</strong>%s</div>

<divstyle="font:normal 14px/28px '微软雅黑';margin:0px; text-indent:10px;"><strong>提交者:</strong>%s</div>

<divstyle="font:normal 14px/28px '微软雅黑';margin:0px;text-indent:10px;"><strong>提交时间:</strong>%s</div>

<divstyle="font:normal 14px/28px '微软雅黑';margin:0px;text-indent:10px;"><strong>提交说明:</strong>%s</div>

<divstyle="color:#FFFFFF; background: #008040;text-align: center;font:bold18px/28px '微软雅黑';margin:10px 0px;">文件清单</div>

<xmpstyle="font:normal 12px/20px '微软雅黑';margin:0px;text-indent:10px;">%s</xmp>

<divstyle="text-align: center; font: bold 15px/50px '微软雅黑';">☆Powered by <ahref="http://www.ladyson.net">Ladyson</a></div>

"""

 

defget_repo_name(repo):

        return os.path.basename(repo)

 

defget_author(repo, rev):

        """svnlook author -r REVREPOS 获得提交者

        """

        cmd = '%s author -r %s %s' % (svnlook_bin_path,rev, repo)

        output = os.popen(cmd).read()

        return output

 

defget_date(repo, rev):

        """svnlook date -r REVREPOS 获得提交时间

        """

        cmd = '%s date -r %s %s' %(svnlook_bin_path, rev, repo)

        output = os.popen(cmd).read()

        return output

 

defget_log(repo, rev):

        """svnlook log -r REVREPOS 获得提交日志

        """

        cmd = '%s log -r %s %s' %(svnlook_bin_path, rev, repo)

        output = os.popen(cmd).read()

        return output

 

defget_file_list(repo, rev):

        """svnlook changed -rREV REPOS 获得发生变更的文件

        """

        cmd = '%s changed -r %s %s' %(svnlook_bin_path, rev, repo)

        output = os.popen(cmd).read()

        return output

 

defsend_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:

                return False

 

defwrite_mail(sender, to_list, sub, content):

        msg = MIMEText(content, _subtype ='html', _charset='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

 

globalsvnlook_bin_path

 

defwrite_mail_content(repo, rev):

        """

        repo: repository

        rev: revision

        """

        repo_name = get_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, log.decode("GBK").encode('UTF-8'),file_list.decode("GBK").encode('UTF-8'))

        return content

if'__main__' == '__main__':

        svnlook_bin_path ='"F:/svn_server/Subversion/bin/svnlook.exe"'

 

        subject = 'SVN post-commit'

        content = write_mail_content(sys.argv[1],sys.argv[2])

        msg = write_mail(me, to_list, subject,content)

        send_mail(msg, me, to_list)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值