通过GMAIL SMTP发送SVN通知

1 投票
2 回答
2298 浏览
提问于 2025-04-16 23:07

我在Ubuntu 11.04 32位系统上安装了SVN,现在想用我的GMAIL账号在每次提交代码时收到通知。

我已经提交了一些内容,但实际上并没有收到这些提交的邮件。没有显示任何错误,我查看了日志,但到目前为止没有找到什么有用的信息。

我读了很多关于这个问题的帖子,并编辑了下面提到的文件,包括它们现在的内容。我尝试过使用sendmail和postfix,但都没有成功,所以我决定使用谷歌的邮件服务器。如果有人能给我指个方向或者提供其他方法,我将非常感激。

我找到并使用的链接:

http://sadomovalex.blogspot.com/2009/12/use-gmail-smtp-server-for-post-commit.html

http://iffee.wordpress.com/2009/04/08/svn-commit-to-google-apps-email-notification/

post-commit.tmpl

REPOS="$1"
REV="$2"

/home/megaz/svn/repos/ya/hooks/mailer.py commit "$REPOS" \
"$REV" /home/megaz/svn/repos/ya/hooks/mailer.conf

mailer.conf

[general]
smtp_hostname = smtp.gmail.com:587
smtp_username = #mygmailaddress
smtp_password = #mygmailpassword
smtp_use_ssl = true
smtp_use_tls = 1

[defaults]
diff = /usr/bin/diff -u -L %(label_from)s -L %(label_to)s %(from)s %(to)s
commit_subject_prefix = [SVN-Commit]
propchange_subject_prefix =
lock_subject_prefix =
unlock_subject_prefix =
from_addr = #my from address 
to_addr = #my to address 
reply_to = #my replyto address 
generate_diffs = none
show_nonmatching_paths = yes

[maps]

mailer.py

class SMTPOutput(MailedOutput):
   def start(self, group, params):
     MailedOutput.start(self, group, params)
     self.buffer = StringIO()
     self.write = self.buffer.write
     self.write(self.mail_headers(group, params))
   def finish(self):
     server = smtplib.SMTP(self.cfg.general.smtp_hostname)
     # 2009-12-13 asadomov: add ssl configuration (e.g. for gmail smtp server)
     if self.cfg.is_set('general.smtp_use_ssl') and self.cfg.general.smtp_use_ssl.lower() == "true":
       server.ehlo()
       server.starttls()
       server.ehlo()
     if self.cfg.is_set('general.smtp_username'):
       server.login(self.cfg.general.smtp_username,
                    self.cfg.general.smtp_password)
     server.sendmail(self.from_addr, self.to_addrs, self.buffer.getvalue())
     server.quit()

2 个回答

0

1. 把你的“post-commit.templ”文件改名为“post-commit”。

2. 确保给“post-commit”文件设置执行权限,比如设置为755。

1

我明白了,你其实没有仔细看说明。你复制粘贴的代码需要替换一个更大文件中的一部分,而你并没有下载那个文件。而且,提交后脚本的文件名不应该带有.templ这个后缀;这个后缀是用来标记不活跃的示例或模板文件的。

也许这就是你为什么无法让Sendmail正常工作了。此时我建议你先回去处理这个,因为它更简单。

撰写回答