互聯(lián)網(wǎng)上有很多相關(guān)的文章,但是說明的不夠明了,我參考這些文章來配置的時(shí)候,走了不少彎路。現(xiàn)在將這兩種方式整理一下。

          第一種方式 通過svnnotify來發(fā)送郵件

          /usr/bin/svnnotify --repos-path "$1" --revision "$2" --to real@admin.net --from real@admin99.net --handler "HTML::ColorDiff"  --with-diff --smtp mail.admin99.net --charset zh_CN:GB2312  -g zh_CN --svnlook /usr/local/subversion/bin/svnlook --subject-prefix '[SVN更新]'

          svnnotify有很多參數(shù),可以通過svnnotify --help 或者man svnnotify 查看

          好多文章中在介紹這種方式的時(shí)候,沒有加上svnlook的絕對路徑,我實(shí)在是很納悶,可能是他們的subversiong在安裝的時(shí)候沒有加上 --prefix=/yourpath 參數(shù),把subversion安裝在了默認(rèn)路徑,我的subversion是安裝在/usr/local/subversion之下的,svnnotify在默認(rèn)的/usr/bin下找不到svnlook,所以,在郵件通知中無法出現(xiàn)log信息,diff信息等等。加上這個(gè)參數(shù)之后,問題解決。

          還有更搞笑的是,很多關(guān)于這個(gè)的文章把 -l 參數(shù)當(dāng)作svn 記錄日志文件的參數(shù),寒~~ -_-!! 可能是把svnnotify和commit-email.pl搞混了,在svnnotify中,這個(gè)參數(shù)是 --language 。

          這種方式還有另外一個(gè)問題,中文轉(zhuǎn)碼的問題,經(jīng)過N次嘗試之后,log信息中的中文,diff信息中的中文仍然顯示的是亂碼,最后因?yàn)闀r(shí)間緊迫,不得不先放棄這種方式。

          第二種方式 通過commit-email.pl 來發(fā)送郵件

          /usr/local/subversion/bin/commit-email.pl "$1" "$2" --from real@admin99.net -h admin99.net  -s "[SVN 更新]" --diff y svnhejia@51hejia.com

          默認(rèn)情況下,在subversion的bin目錄下,沒有commit-email.pl這個(gè)文件,是我從src中copy過來的。

          關(guān)于commit-email.pl所能用的參數(shù),可以通過直接執(zhí)行/usr/local/subversion/bin/commit-email.pl 來查看,當(dāng)然這個(gè)時(shí)候是執(zhí)行不了了,提示錯(cuò)誤是參數(shù)太少,然后給你列出來一些參數(shù)。參數(shù)不多。

          --diff y 是表示在郵件中加入diff信息,這個(gè)當(dāng)然是要的

          后面跟的郵件地址,是接收郵件的地址,有人說可以在后面寫上N個(gè)地址,用空格分開就行,事實(shí)上我測試的時(shí)候,這種方式根本就收不到郵件了,時(shí)間緊迫,不能詳細(xì)測試。最后不得不在郵件服務(wù)器上做了一個(gè)組郵件地址。

          關(guān)于中文問題,通過在commit-email.pl中更改字符集,基本上可以很完美的解決diff信息中的中文問題。

          但是對于log信息中的中文,至今尚未找到合適的解決辦法。

          這個(gè)問題的關(guān)鍵應(yīng)該是在于,svn客戶端在提交更新的時(shí)候,輸入的log信息,使用的是非ascii編碼(應(yīng)該是unicode) ,commit-email.pl(還不缺認(rèn)問題是不是出在commit-email.pl還是出在svn本身)在處理非ascii編碼時(shí),將其轉(zhuǎn)換成了諸如 ?\230?\181?\139?\232?\175?\149?\228?\186?\140 這樣的不可讀的數(shù)字形式。
          在互聯(lián)網(wǎng)上找到一篇文章,是06年寫的,提到了一種解決這個(gè)的辦法,不過我測試下來沒有成功,還是貼出來吧,不定誰的就可以成功了

          my @difflines; (行487) 的前面加上:

          for (my $i=0; $i<@body; ++$i){
             my @rsa = split( /\?\\/, $body[$i] );
             $body[$i] = "";
             foreach my $val (@rsa) {
                 $val =~ /(^[0-9]{3})(.*)/;
                 if(defined $1 and $1 gt 0){
                     #print "\n[".$1 . "," . $2."]";
                     $body[$i] .= chr($1) . $2;
                 }
                 else{
                     $body[$i] .= $val;
                 }
             }
          }

          把之前 push 到 @body 變量的所有內(nèi)容重新進(jìn)行處理,發(fā)現(xiàn) ?\ 后面跟三個(gè)數(shù)字就替換為相應(yīng)的字符。

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          posts - 27, comments - 15, trackbacks - 0, articles - 1

          Copyright © E.ven

          主站蜘蛛池模板: 阿尔山市| 轮台县| 德惠市| 安远县| 景东| 怀集县| 阿鲁科尔沁旗| 宕昌县| 沙田区| 绍兴市| 广德县| 鸡东县| 通州市| 浦北县| 泌阳县| 辉县市| 军事| 双江| 伊川县| 河北省| 太湖县| 镇坪县| 郯城县| 临夏县| 三明市| 彝良县| 容城县| 沾化县| 遵义市| 昔阳县| 三明市| 鄱阳县| 贵州省| 离岛区| 大城县| 孝义市| 浦东新区| 云阳县| 花垣县| 松滋市| 安庆市|