Subversion의 mailer.py 스크립트에서 Gmail SMTP 사용하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

Subversion에는 커밋을 하면 커밋 로그와 변경사항을 메일로 보내주는 기능이 있습니다. subversion 안에 있는 mailer.py 스크립트는 일반 메일서버로는 메일이 잘 보내지지만 Gmail SMTP는 사용이 잘 되지 않습니다. mailer.py를 약간 수정하면 Gmail SMTP로도 커밋 로그 메일을 잘 보낼 수 있습니다(리눅스의 경우 자체 sendmail을 통해 보내는 것은 수정 없이도 가능합니다).

mailer.py 스크립트는 Subversion 소스 안에 tools/hook-scripts/mailer에 있습니다.

일단 이 스크립트를 사용하려면 저장소의 hooks 디렉토리안에 post-commit.tmpl 파일을 post-commit으로 이름을 바꿉니다(Windows의 경우 post-commit.bat으로). 그리고 post-commit 파일의 맨 아래에 다음을 추가합니다.

Linux, BSD 등.

/repos/mailer.py commit "$REPOS" "$REV" /repos/mailer.conf

Windows

C:\repos\mailer.py commit %REPOS% %REV% C:\repos\mailer.conf

그리고 mailer.conf.example를 mailer.conf로 이름을 바꾸고 내용 Gmail에 맞게 설정을 합니다.

# This option specifies the hostname for delivery via SMTP. 
smtp_hostname = smtp.gmail.com:587

# Username and password for SMTP servers requiring authorisation. 
smtp_username = example@gmail.com
smtp_password = (이메일 암호)

다른 설정은 자신의 환경에 맞게 설정합니다.

mailer.py의 SMTPOutput 클래스 finish 함수를 아래와 같이 수정합니다.

def finish(self): 
  server = smtplib.SMTP(self.cfg.general.smtp_hostname) 
  if self.cfg.is_set('general.smtp_username'): 
    server.ehlo()         # 추가된 부분
    server.starttls()     # 추가된 부분
    server.ehlo()         # 추가된 부분
    server.login(self.cfg.general.smtp_username, 
                 self.cfg.general.smtp_password) 
  server.sendmail(self.from_addr, self.to_addrs, self.buffer.getvalue()) 
  server.close()          # server.quit()를 server.close()로 수정.

이렇게 하면 Gmail SMTP 서버를 통해서 커밋 로그 메일을 보낼 수 있습니다. Gmail은 TLS 인증을 사용하기 때문에 starttls()함수를 호출해 줘야 로그인이 됩니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2007-03-19