수신 이메일
GitLab은 수신된 이메일 메시지를 기반으로한 여러 기능을 갖고 있습니다.
- 이메일로 회신: GitLab 사용자가 알림 이메일에 답장하여 이슈 및 병합 요청에 댓글을 남길 수 있게 합니다.
- 이메일로 새 이슈 작성: GitLab 사용자가 사용자별 이메일 주소로 이메일을 보내어 새 이슈를 생성할 수 있게 합니다.
- 이메일로 새 병합 요청 작성: GitLab 사용자가 사용자별 이메일 주소로 이메일을 보내어 새 병합 요청을 생성할 수 있게 합니다.
- 서비스 데스크: GitLab을 통해 고객에게 이메일 지원을 제공합니다.
요구 사항
GitLab 인스턴스를 위한 의도된 메시지만 수신하는 이메일 주소를 사용하는 것을 권장합니다. GitLab을 위해 의도되지 않은 수신된 이메일은 거부 통지가 전달됩니다.
수신된 이메일 메시지를 처리하려면 IMAP를 지원하는 이메일 계정이 필요합니다. GitLab은 다음 세 가지 전략 중 하나를 요구합니다:
- 이메일 서브 주소(권장)
- 캐치-올 메일함
- 전용 이메일 주소(회신 전용)
각 옵션에 대해 설명해보겠습니다.
이메일 서브 주소
서브 주소는 user+arbitrary_tag@example.com
로 보내는 모든 이메일이 user@example.com
메일함으로 전송되는 메일 서버 기능입니다. Gmail, Google Apps, Yahoo! Mail, Outlook.com 및 온프레미스에서 실행할 수 있는 Postfix 메일 서버와 같은 공급업체에서 지원됩니다. Microsoft Exchange Server는 서브 주소를 지원하지 않습니다 그리고 Microsoft Office 365는 기본적으로 서브 주소를 지원하지 않습니다.
참고: 서브 주소를 지원하는 공급업체 또는 서버가 있는 경우 사용하는 것을 권장합니다. 전용 이메일 주소는 회신 전용 기능만 지원합니다. 캐치-올 메일함은 GitLab 11.7 이후로 서브 주소와 동일한 기능을 지원하지만, 여러 용도로 사용 가능한 캐치-올 메일함을 남겨두기 위해 여전히 서브 주소가 우선됩니다.
캐치-올 메일함
도메인의 캐치-올 메일함은 메일 서버에 있는 주소와 일치하지 않는 도메인으로 보내진 모든 이메일을 수신합니다.
GitLab 11.7 이후로 캐치-올 메일함은 이메일 서브 주소와 동일한 기능을 지원하지만, 이메일 서브 주소를 사용하여 캐치-올 메일함을 다른 용도로 예약할 수 있도록 하는 것이 여전히 권장됩니다.
전용 이메일 주소
이 방법을 설정하려면 사용자의 회신을 받을 전용 이메일 주소를 만들어야 합니다. 그러나 이 방법은 회신 기능만 지원하며 수신된 이메일의 다른 기능을 지원하지 않습니다.
허용된 헤더
구성된 이메일 주소가 다음 헤더 중 하나에 포함되어 있을 때 이메일이 올바르게 처리됩니다(확인하는 순서로 정렬됨):
To
Delivered-To
-
Envelope-To
혹은X-Envelope-To
Received
Cc
References
헤더도 허용되지만, 기존 토론 스레드와 관련된 이메일 응답을 지정하는 데 사용됩니다. 이는 이메일로 이슈를 생성하는 데 사용되지 않습니다.
GitLab 14.6 이후로 서비스 데스크도 허용된 헤더를 확인합니다.
보통 “To” 필드에는 주 이베이트 주소가 포함됩니다. 그러나 다음과 같은 경우 구성된 GitLab 이메일 주소가 포함되지 않을 수 있습니다:
- 주소가 “BCC” 필드에 있는 경우
- 이메일이 전달된 경우
Received
헤더에는 여러 이메일 주소가 포함될 수 있습니다. 이들은 나타나는 순서대로 확인됩니다.
첫 번째 일치 항목이 사용됩니다.
거부된 헤더
자동 이메일 시스템에서의 원치 않는 이슈 생성을 방지하기 위해 GitLab은 다음 헤더를 포함하는 모든 수신된 이메일을 무시합니다:
- 값이
no
가 아닌Auto-Submitted
- 값이
yes
인X-Autoreply
설정하기
수신된 이메일에 Gmail / Google Apps을 사용하려면 IMAP 액세스를 사용하고 보안 수준이 낮은 앱의 액세스를 허용하거나 2단계 인증을 사용하고 애플리케이션 암호를 사용하십시오.
Office 365를 사용하려면, 이중 인증이 활성화된 경우, 일반 비밀번호 대신 앱 암호를 사용하십시오.
Ubuntu에서 기본적인 Postfix 메일 서버를 IMAP 액세스와 함께 설정하려면 Postfix 설치 설명서를 따르십시오.
보안 문제
경고: 수신 이메일을 받기 위해 사용되는 도메인을 선택할 때 주의하십시오.
예를 들어, 회사의 최상위 도메인이 hooli.com
이라고 가정해 보겠습니다.
회사의 모든 직원은 구글 앱스를 통해 해당 도메인의 이메일 주소를 가지고 있으며, 회사의 사설 Slack 인스턴스는 유효한 @hooli.com
이메일 주소로 회원 가입이 필요합니다.
만약 당신이 hooli.com
에서 공개 GitLab 인스턴스를 호스팅하고, 수신 이메일 도메인을 hooli.com
으로 설정하면, 공격자는 프로젝트의 고유 주소를 사용하여 Slack 회원 가입 시 이메일로 악용할 수 있습니다. 이는 확인 이메일을 보내고, 이로 인해 공격자가 보유한 프로젝트에 새 이슈나 합병 요청을 생성하게 하여 그들이 회사의 사설 Slack 인스턴스에서 계정을 활성화할 수 있게 합니다.
우리는 수신 이메일을 incoming.hooli.com
과 같은 서브도메인에서 받고, *.hooli.com
과 같이 이메일 도메인에만 의존하는 서비스를 사용하지 않도록 권장합니다. 또는 hooli-gitlab.com
과 같은 전용 도메인을 GitLab 이메일 통신에 사용하세요.
이 문제의 실제 예시는 GitLab 이슈 #30366에서 확인할 수 있습니다.
경고:
스팸을 줄이기 위해 설정된 메일 서버를 사용하세요.
예를 들어 기본 구성에서 실행 중인 포스트픽스 메일 서버는 남용될 수 있습니다. 구성된 메일함에서 받은 모든 메시지는 처리되고, GitLab 인스턴스를 위해 의도되지 않은 메시지는 거절되었다는 알림을 받습니다. 만약 보낸 사람의 주소가 위조되었다면, 거절 알림은 위조된 FROM
주소로 전달되어 메일 서버의 IP나 도메인이 차단 목록에 표시될 수 있습니다.
경고: 사용자는 자신을 인증하기 위해 2단계 인증(2FA)을 강제하지 않고도 수신 이메일 기능을 사용할 수 있습니다. 당신이 인스턴스에 2단계 인증을 강제 적용했더라도 여전히 적용됩니다.
Linux 패키지 설치
-
/etc/gitlab/gitlab.rb
에서incoming_email
섹션을 찾아 기능을 활성화하고, 특정 IMAP 서버 및 이메일 계정에 대한 세부 정보를 입력하세요 (아래 예제 참조). -
변경 사항이 적용되려면 GitLab을 재구성하세요:
sudo gitlab-ctl reconfigure # 처음으로 활성화 또는 비활성화하는 경우에 필요하지만, 비밀번호 변경에는 필요하지 않습니다. # 참조: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/23560#note_61966788 sudo gitlab-ctl restart
-
모든 구성이 올바르게 되었는지 확인하세요:
sudo gitlab-rake gitlab:incoming_email:check
이제 이메일에 의한 회신이 작동해야 합니다.
자체 컴파일 설치
-
GitLab 설치 디렉토리로 이동하세요:
cd /home/git/gitlab
-
gitlab-mail_room
젬을 수동으로 설치하세요:gem install gitlab-mail_room
참고: 스레드 데드락을 피하고 최신 MailRoom 기능을 지원하기 위해 필요합니다. 자세한 내용은 이 설명을 참조하세요.
-
config/gitlab.yml
에서incoming_email
섹션을 찾아 기능을 활성화하고, 특정 IMAP 서버 및 이메일 계정에 대한 세부 정보를 입력하세요 (아래 예제 참조).
만약 systemd 단위를 사용하여 GitLab을 관리한다면:
-
gitlab-mailroom.service
를gitlab.target
의 종속성으로 추가하세요:sudo systemctl edit gitlab.target
열리는 편집기에 다음을 추가하고 파일을 저장하세요:
[Unit] Wants=gitlab-mailroom.service
-
만약 Redis와 PostgreSQL을 같은 시스템에서 실행 중이라면, Redis에 종속성을 추가해야 합니다. 다음을 실행하세요:
sudo systemctl edit gitlab-mailroom.service
열리는 편집기에 다음을 추가하고 파일을 저장하세요:
[Unit] Wants=redis-server.service After=redis-server.service
-
gitlab-mailroom.service
를 시작하세요:sudo systemctl start gitlab-mailroom.service
-
모든 구성이 올바르게 되었는지 확인하세요:
sudo -u git -H bundle exec rake gitlab:incoming_email:check RAILS_ENV=production
만약 SysV init 스크립트를 사용하여 GitLab을 관리한다면:
-
/etc/default/gitlab
의 초기 스크립트에mail_room
을 활성화하세요:sudo mkdir -p /etc/default echo 'mail_room_enabled=true' | sudo tee -a /etc/default/gitlab
-
GitLab을 재시작하세요:
sudo service gitlab restart
-
모든 구성이 올바르게 되었는지 확인하세요:
sudo -u git -H bundle exec rake gitlab:incoming_email:check RAILS_ENV=production
이제 이메일에 의한 회신이 작동해야 합니다.
구성 예시
포스트픽스
포스트픽스 메일 서버의 예시 구성. 메일함은 incoming@gitlab.example.com
을 가정합니다.
리눅스 패키지 설치를 위한 예시:
gitlab_rails['incoming_email_enabled'] = true
# %{key} 플레이스홀더를 포함한 이메일 주소로, 이는 회신할 대상을 참조하기 위해 대체될 것입니다.
# 이 %{key}는 이메일 주소 내 "사용자" 부분(‘@’ 앞)에 완전히 포함되어야 하며, 다른 값으로 대체되어서는 안 됩니다.
# 예시: emailaddress+%{key}@gitlab.example.com.
gitlab_rails['incoming_email_address'] = "incoming+%{key}@gitlab.example.com"
# 이메일 계정 사용자 이름
# 타사 제공업체의 경우 일반적으로 전체 이메일 주소입니다.
# 자체 호스팅된 이메일 서버의 경우 이메일 주소의 사용자 부분이 일반적입니다.
gitlab_rails['incoming_email_email'] = "incoming"
# 이메일 계정 암호
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP 서버 호스트
gitlab_rails['incoming_email_host'] = "gitlab.example.com"
# IMAP 서버 포트
gitlab_rails['incoming_email_port'] = 143
# IMAP 서버가 SSL을 사용하는지 여부
gitlab_rails['incoming_email_ssl'] = false
# IMAP 서버가 StartTLS를 사용하는지 여부
gitlab_rails['incoming_email_start_tls'] = false
# 수신 메일이 도착할 메일함. 일반적으로 "받은편지함"(inbox).
gitlab_rails['incoming_email_mailbox_name'] = "inbox"
# IDLE 명령 시간 초과.
gitlab_rails['incoming_email_idle_timeout'] = 60
# IMAP 대신 Microsoft Graph를 사용하는 경우, 메시지를 일정 시간 후에 자동 삭제되지 않도록 이를 false로 설정하세요.
gitlab_rails['incoming_email_delete_after_delivery'] = true
# 메시지를 수신 후 삭제된 것으로 표시된 경우 메일함에서 메시지를 영구적으로 제거할지 여부.
# IMAP에만 적용됩니다. Microsoft Graph는 삭제된 메시지를 자동으로 영구 제거합니다.
gitlab_rails['incoming_email_expunge_deleted'] = true
자체 컴파일된 설치를 위한 예시:
incoming_email:
enabled: true
# %{key} 플레이스홀더를 포함한 이메일 주소로, 이는 회신할 대상을 참조하기 위해 대체될 것입니다.
# 이 %{key}는 이메일 주소 내 "사용자" 부분(‘@’ 앞)에 완전히 포함되어야 하며, 다른 값으로 대체되어서는 안 됩니다.
address: "incoming+%{key}@gitlab.example.com"
# 이메일 계정 사용자 이름
# 타사 제공업체의 경우 일반적으로 전체 이메일 주소입니다.
# 자체 호스팅된 이메일 서버의 경우 이메일 주소의 사용자 부분이 일반적입니다.
user: "incoming"
# 이메일 계정 암호
password: "[REDACTED]"
# IMAP 서버 호스트
host: "gitlab.example.com"
# IMAP 서버 포트
port: 143
# IMAP 서버가 SSL을 사용하는지 여부
ssl: false
# IMAP 서버가 StartTLS를 사용하는지 여부
start_tls: false
# 수신 메일이 도착할 메일함. 일반적으로 "받은편지함"(inbox).
mailbox: "inbox"
# IDLE 명령 시간 초과.
idle_timeout: 60
# IMAP 대신 Microsoft Graph를 사용하는 경우, 메시지를 일정 시간 후에 자동 삭제되지 않도록 이를 false로 설정하세요.
delete_after_delivery: true
# 메시지를 수신 후 삭제된 것으로 표시된 경우 메일함에서 메시지를 영구적으로 제거할지 여부.
# IMAP에만 적용됩니다. Microsoft Graph는 삭제된 메시지를 자동으로 영구 제거합니다.
expunge_deleted: true
Gmail
Gmail/Google Workspace의 예시 구성. 메일함은 gitlab-incoming@gmail.com
을 가정합니다.
참고:
incoming_email_email
은 Gmail 별칭 계정일 수 없습니다.
리눅스 패키지 설치를 위한 예시:
gitlab_rails['incoming_email_enabled'] = true
# %{key} 플레이스홀더를 포함한 이메일 주소로, 이는 회신할 대상을 참조하기 위해 대체될 것입니다.
# 이 %{key}는 이메일 주소 내 "사용자" 부분(‘@’ 앞)에 완전히 포함되어야 하며, 다른 값으로 대체되어서는 안 됩니다.
# 예시: emailaddress+%{key}@gmail.com.
gitlab_rails['incoming_email_address'] = "gitlab-incoming+%{key}@gmail.com"
# 이메일 계정 사용자 이름
# 타사 제공업체의 경우 일반적으로 전체 이메일 주소입니다.
# 자체 호스팅된 이메일 서버의 경우 이메일 주소의 사용자 부분이 일반적입니다.
gitlab_rails['incoming_email_email'] = "gitlab-incoming@gmail.com"
# 이메일 계정 암호
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP 서버 호스트
gitlab_rails['incoming_email_host'] = "imap.gmail.com"
# IMAP 서버 포트
gitlab_rails['incoming_email_port'] = 993
# IMAP 서버가 SSL을 사용하는지 여부
gitlab_rails['incoming_email_ssl'] = true
# IMAP 서버가 StartTLS를 사용하는지 여부
gitlab_rails['incoming_email_start_tls'] = false
# 수신 메일이 도착할 메일함. 일반적으로 "받은편지함"(inbox).
gitlab_rails['incoming_email_mailbox_name'] = "inbox"
# IDLE 명령 시간 초과.
gitlab_rails['incoming_email_idle_timeout'] = 60
# IMAP 대신 Microsoft Graph를 사용하는 경우, 메시지를 일정 시간 후에 자동 삭제되지 않도록 이를 false로 설정하세요.
gitlab_rails['incoming_email_delete_after_delivery'] = true
# 메시지를 수신 후 삭제된 것으로 표시된 경우 메일함에서 메시지를 영구적으로 제거할지 여부.
# IMAP에만 적용됩니다. Microsoft Graph는 삭제된 메시지를 자동으로 영구 제거합니다.
gitlab_rails['incoming_email_expunge_deleted'] = true
자체 컴파일된 설치를 위한 예시:
incoming_email:
enabled: true
# %{key} 플레이스홀더를 포함한 이메일 주소로, 이는 회신할 대상을 참조하기 위해 대체될 것입니다.
# 이 %{key}는 이메일 주소 내 "사용자" 부분(‘@’ 앞)에 완전히 포함되어야 하며, 다른 값으로 대체되어서는 안 됩니다.
address: "gitlab-incoming+%{key}@gmail.com"
# 이메일 계정 사용자 이름
# 타사 제공업체의 경우 일반적으로 전체 이메일 주소입니다.
# 자체 호스팅된 이메일 서버의 경우 이메일 주소의 사용자 부분이 일반적입니다.
user: "gitlab-incoming@gmail.com"
# 이메일 계정 암호
password: "[REDACTED]"
# IMAP 서버 호스트
host: "imap.gmail.com"
# IMAP 서버 포트
port: 993
# IMAP 서버가 SSL을 사용하는지 여부
ssl: true
# IMAP 서버가 StartTLS를 사용하는지 여부
start_tls: false
# 수신 메일이 도착할 메일함. 일반적으로 "받은편지함"(inbox).
mailbox: "inbox"
# IDLE 명령 시간 초과.
idle_timeout: 60
# IMAP 대신 Microsoft Graph를 사용하는 경우, 메시지를 일정 시간 후에 자동 삭제되지 않도록 이를 false로 설정하세요.
delete_after_delivery: true
# 메시지를 수신 후 삭제된 것으로 표시된 경우 메일함에서 메시지를 영구적으로 제거할지 여부.
# IMAP에만 적용됩니다. Microsoft Graph는 삭제된 메시지를 자동으로 영구 제거합니다.
expunge_deleted: true
Microsoft Exchange Server
Microsoft Exchange Server의 IMAP가 활성화된 예제 구성입니다. Exchange는 서브 주소 지원을 지원하지 않기 때문에 두 가지 옵션이 존재합니다.
- Catch-all mailbox (Exchange 전용 권장)
- Dedicated email address (답장 전용 이메일 지원)
Catch-all mailbox
catch-all 메일함 incoming@exchange.example.com
을 전제로 합니다.
Linux 패키지 설치 예시:
gitlab_rails['incoming_email_enabled'] = true
# 답장을 참조하는 데 대체될 %{key} 플레이스 홀더를 포함한 이메일 주소
# 이 %{key}는 이메일 주소 내에서 완전히 포함되어야 하며, 다른 값으로 대체되어서는 안 됩니다.
# 예: emailaddress-%{key}@exchange.example.com.
# 이 플레이스 홀더는 주소의 "사용자" 부분( `@` 앞)에 나타나야 합니다.
# Exchange는 서브 주소 지원을 지원하지 않으므로 catch-all 메일함을 사용해야 합니다.
gitlab_rails['incoming_email_address'] = "incoming-%{key}@exchange.example.com"
# 이메일 계정 사용자 이름
# 일반적으로 이는 사용자 주체 이름(UPN)입니다.
gitlab_rails['incoming_email_email'] = "incoming@ad-domain.example.com"
# 이메일 계정 암호
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP 서버 호스트
gitlab_rails['incoming_email_host'] = "exchange.example.com"
# IMAP 서버 포트
gitlab_rails['incoming_email_port'] = 993
# IMAP 서버가 SSL을 사용하는지 여부
gitlab_rails['incoming_email_ssl'] = true
# 받은 메시지가 배달된 후 삭제 표시되면 메일함에서 메시지를 영구적으로 삭제(청소)해야 할지 여부
# IMAP에만 해당됩니다. Microsoft Graph는 삭제된 메시지를 자동으로 영구적으로 삭제합니다.
gitlab_rails['incoming_email_expunge_deleted'] = true
수동 컴파일 설치 예시:
incoming_email:
enabled: true
# 답장을 참조하는 데 대체될 %{key} 플레이스 홀더를 포함한 이메일 주소
# 이 %{key}는 이메일 주소 내에서 완전히 포함되어야 하며, 다른 값으로 대체되어서는 안 됩니다.
# 예: emailaddress-%{key}@exchange.example.com.
# 이 플레이스 홀더는 주소의 "사용자" 부분( `@` 앞)에 나타나야 합니다.
# Exchange는 서브 주소 지원을 지원하지 않으므로 catch-all 메일함을 사용해야 합니다.
address: "incoming-%{key}@exchange.example.com"
# 이메일 계정 사용자 이름
# 일반적으로 이는 사용자 주체 이름(UPN)입니다.
user: "incoming@ad-domain.example.com"
# 이메일 계정 암호
password: "[REDACTED]"
# IMAP 서버 호스트
host: "exchange.example.com"
# IMAP 서버 포트
port: 993
# IMAP 서버가 SSL을 사용하는지 여부
ssl: true
# IMAP 대신 Microsoft Graph를 사용하는 경우, 일정 시간 후 자동으로 삭제된 메시지를 유지하도록 하려면 false로 설정하세요.
delete_after_delivery: true
# 받은 메시지가 배달된 후 삭제 표시되면 메일함에서 메시지를 영구적으로 삭제해야 할지 여부
expunge_deleted: true
Dedicated email address
참고: Email로 답장만 지원됩니다. Service Desk는 지원할 수 없습니다.
dedicated 이메일 주소 incoming@exchange.example.com
을 전제로 합니다.
Linux 패키지 설치 예시:
gitlab_rails['incoming_email_enabled'] = true
# Exchange는 서브 주소를 지원하지 않으며, 우리는 catch-all 메일함을 사용하지 않기 때문에 %{key}는 여기에 사용되지 않습니다
gitlab_rails['incoming_email_address'] = "incoming@exchange.example.com"
# 이메일 계정 사용자 이름
# 일반적으로 이는 사용자 주체 이름(UPN)입니다.
gitlab_rails['incoming_email_email'] = "incoming@ad-domain.example.com"
# 이메일 계정 암호
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP 서버 호스트
gitlab_rails['incoming_email_host'] = "exchange.example.com"
# IMAP 서버 포트
gitlab_rails['incoming_email_port'] = 993
# IMAP 서버가 SSL을 사용하는지 여부
gitlab_rails['incoming_email_ssl'] = true
# 받은 메시지가 배달된 후 삭제 표시되면 메일함에서 메시지를 영구적으로 삭제해야 할지 여부
gitlab_rails['incoming_email_expunge_deleted'] = true
수동 컴파일 설치 예시:
incoming_email:
enabled: true
# Exchange는 서브 주소를 지원하지 않으며,
# 우리는 catch-all 메일함을 사용하지 않기 때문에 %{key}는 여기에 사용되지 않습니다
address: "incoming@exchange.example.com"
# 이메일 계정 사용자 이름
# 일반적으로 이는 사용자 주체 이름(UPN)입니다.
user: "incoming@ad-domain.example.com"
# 이메일 계정 암호
password: "[REDACTED]"
# IMAP 서버 호스트
host: "exchange.example.com"
# IMAP 서버 포트
port: 993
# IMAP 서버가 SSL을 사용하는지 여부
ssl: true
# IMAP 대신 Microsoft Graph를 사용하는 경우, 일정 시간 후 자동으로 삭제된 메시지를 유지하도록 하려면 false로 설정하세요.
delete_after_delivery: true
# 받은 메시지가 배달된 후 삭제 표시되면 메일함에서 메시지를 영구적으로 삭제해야 할지 여부
expunge_deleted: true
Microsoft Office 365
Microsoft Office 365의 IMAP를 활성화한 예시 구성.
서브 주소함
참고: 2020년 9월부로 Office 365에 서브 주소 지원이 추가되었습니다. 이 기능은 기본적으로 활성화되어 있지 않으며 PowerShell을 통해 활성화해야 합니다.
다음 PowerShell 명령어 시리즈는 Office 365에서 조직 수준에서 서브 주소 사용을 가능하게 합니다. 이를 통해 조직의 모든 메일함이 서브 주소화된 이메일을 받을 수 있습니다.
서브 주소를 활성화하려면:
-
PowerShell 갤러리에서
ExchangeOnlineManagement
모듈을 다운로드하고 설치합니다. -
PowerShell에서 다음 명령어를 실행합니다:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser Import-Module ExchangeOnlineManagement Connect-ExchangeOnline Set-OrganizationConfig -AllowPlusAddressInRecipients $true Disconnect-ExchangeOnline
이 Linux 패키지 설치 예시는 incoming@office365.example.com
메일함을 가정합니다:
gitlab_rails['incoming_email_enabled'] = true
# %{key} 플레이스홀더를 참조하기 위해 대체될 이메일 주소 포함(깞 이메일 참조를 위해 %{key}가 이메일 주소 내에서 완전히 포함되어 있어야 함).
# 예: emailaddress+%{key}@office365.example.com.
# 플레이스홀더는 주소의 "사용자" 부분( `@` 이전)에 나타나야 합니다.
gitlab_rails['incoming_email_address'] = "incoming+%{key}@office365.example.com"
# 이메일 계정 사용자명
# 일반적으로 이는 userPrincipalName (UPN)입니다.
gitlab_rails['incoming_email_email'] = "incoming@office365.example.com"
# 이메일 계정 비밀번호
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP 서버 호스트
gitlab_rails['incoming_email_host'] = "outlook.office365.com"
# IMAP 서버 포트
gitlab_rails['incoming_email_port'] = 993
# IMAP 서버가 SSL을 사용하는지 여부
gitlab_rails['incoming_email_ssl'] = true
# 메시지가 전달된 후 삭제된 메시지를 영구적으로 제거할지 여부
gitlab_rails['incoming_email_expunge_deleted'] = true
이 Self-Compiled 설치 예시는 incoming@office365.example.com
메일함을 가정합니다:
incoming_email:
enabled: true
# %{key} 플레이스홀더를 참조하기 위해 대체될 이메일 주소 포함(깞 이메일 참조를 위해 %{key}가 이메일 주소 내에서 완전히 포함되어 있어야 함).
# 예: emailaddress+%{key}@office365.example.com.
# 플레이스홀더는 주소의 "사용자" 부분( `@` 이전)에 나타나야 합니다.
address: "incoming+%{key}@office365.example.comm"
# 이메일 계정 사용자명
# 일반적으로 이는 userPrincipalName (UPN)입니다.
user: "incoming@office365.example.comm"
# 이메일 계정 비밀번호
password: "[REDACTED]"
# IMAP 서버 호스트
host: "outlook.office365.com"
# IMAP 서버 포트
port: 993
# IMAP 서버가 SSL을 사용하는지 여부
ssl: true
# 메시지가 전달된 후 삭제된 메시지를 영구적으로 제거할지 여부
expunge_deleted: true
캐치-올 메일함
이 Linux 패키지 설치 예시는 캐치-올 메일함이 incoming@office365.example.com
인 것을 가정합니다:
gitlab_rails['incoming_email_enabled'] = true
# %{key} 플레이스홀더를 참조하기 위해 대체될 이메일 주소 포함(깞 이메일 참조를 위해 %{key}가 이메일 주소 내에서 완전히 포함되어 있어야 함).
# 예: emailaddress-%{key}@office365.example.com.
# 플레이스홀더는 주소의 "사용자" 부분( `@` 이전)에 나타나야 합니다.
gitlab_rails['incoming_email_address'] = "incoming-%{key}@office365.example.com"
# 이메일 계정 사용자명
# 일반적으로 이는 userPrincipalName (UPN)입니다.
gitlab_rails['incoming_email_email'] = "incoming@office365.example.com"
# 이메일 계정 비밀번호
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP 서버 호스트
gitlab_rails['incoming_email_host'] = "outlook.office365.com"
# IMAP 서버 포트
gitlab_rails['incoming_email_port'] = 993
# IMAP 서버가 SSL을 사용하는지 여부
gitlab_rails['incoming_email_ssl'] = true
# 메시지가 전달된 후 삭제된 메시지를 영구적으로 제거할지 여부
gitlab_rails['incoming_email_expunge_deleted'] = true
이 Self-Compiled 설치 예시는 캐치-올 메일함이 incoming@office365.example.com
인 것을 가정합니다:
incoming_email:
enabled: true
# %{key} 플레이스홀더를 참조하기 위해 대체될 이메일 주소 포함(깞 이메일 참조를 위해 %{key}가 이메일 주소 내에서 완전히 포함되어 있어야 함).
# 예: emailaddress+%{key}@office365.example.com.
# 플레이스홀더는 주소의 "사용자" 부분( `@` 이전)에 나타나야 합니다.
address: "incoming-%{key}@office365.example.com"
# 이메일 계정 사용자명
# 일반적으로 이는 userPrincipalName (UPN)입니다.
user: "incoming@ad-domain.example.com"
# 이메일 계정 비밀번호
password: "[REDACTED]"
# IMAP 서버 호스트
host: "outlook.office365.com"
# IMAP 서버 포트
port: 993
# IMAP 서버가 SSL을 사용하는지 여부
ssl: true
# 메시지가 전달된 후 삭제된 메시지를 영구적으로 제거할지 여부
expunge_deleted: true
전용 이메일 주소
참고: 이메일로 답장만 지원됩니다. 서비스 데스크는 지원되지 않습니다.
이 예제는 Linux 패키지 설치를 위한 것으로, 전용 이메일 주소 incoming@office365.example.com
을 가정합니다:
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "incoming@office365.example.com"
# 이메일 계정 사용자 이름
# 일반적으로 이는 사용자 주요 명 (UPN)입니다
gitlab_rails['incoming_email_email'] = "incoming@office365.example.com"
# 이메일 계정 비밀번호
gitlab_rails['incoming_email_password'] = "[REDACTED]"
# IMAP 서버 호스트
gitlab_rails['incoming_email_host'] = "outlook.office365.com"
# IMAP 서버 포트
gitlab_rails['incoming_email_port'] = 993
# IMAP 서버가 SSL을 사용하는지 여부
gitlab_rails['incoming_email_ssl'] = true
# 메시지가 전달된 후 삭제되었을 때 메일함에서 영구적으로 제거 (삭제)할지 여부
gitlab_rails['incoming_email_expunge_deleted'] = true
이 예제는 직접 컴파일한 설치를 위한 것으로, 전용 이메일 주소 incoming@office365.example.com
를 가정합니다:
incoming_email:
enabled: true
address: "incoming@office365.example.com"
# 이메일 계정 사용자 이름
# 일반적으로 이는 사용자 주요 명 (UPN)입니다
user: "incoming@office365.example.com"
# 이메일 계정 비밀번호
password: "[REDACTED]"
# IMAP 서버 호스트
host: "outlook.office365.com"
# IMAP 서버 포트
port: 993
# IMAP 서버가 SSL을 사용하는지 여부
ssl: true
# 메시지가 전달된 후 삭제되었을 때 메일함에서 영구적으로 제거 (삭제)할지 여부
expunge_deleted: true
마이크로소프트 그래프
- GitLab 13.11에 도입되었습니다.
GitLab은 IMAP 대신에 Microsoft Graph API를 사용하여 수신 이메일을 읽을 수 있습니다. 왜냐하면 마이크로소프트가 기본 인증과 함께의 IMAP 사용을 폐지하기 때문에, 새 마이크로소프트 Exchange Online 메일함에는 Microsoft Graph API가 필요합니다.
Microsoft Graph를 위해 GitLab을 구성하려면, Mail.ReadWrite
권한을 모든 메일함에 대해 갖는 Azure Active Directory에서 OAuth 2.0 애플리케이션을 등록해야 합니다. 더 많은 세부 정보는 MailRoom 단계별 가이드와 Microsoft 지침에서 확인하세요.
OAuth 2.0 애플리케이션을 구성할 때 다음을 기록하세요:
- Azure Active Directory의 테넌트 ID
- OAuth 2.0 애플리케이션의 클라이언트 ID
- OAuth 2.0 애플리케이션의 클라이언트 비밀번호
메일함 액세스 제한
서비스 계정으로 MailRoom을 사용하려면, Azure Active Directory에서 만든 애플리케이션은 모든 메일함에서 메일을 읽거나 쓰려면 Mail.ReadWrite
속성을 설정해야 합니다.
보안 문제를 완화하기 위해, 모든 계정에 대한 메일함 액세스를 제한하는 애플리케이션 액세스 정책을 구성하는 것이 좋으며, 자세한 내용은 Microsoft 문서를 참조하세요.
이 예제는 Linux 패키지 설치를 전제로 하고 있으며, 다음 메일함을 사용한다고 가정합니다: incoming@example.onmicrosoft.com
마이크로소프트 그래프 구성
- GitLab 14.9에서 대안 Azure 배포가 도입되었습니다.
gitlab_rails['incoming_email_enabled'] = true
# %{key} 플레이스홀더를 참조하는 데 사용될 이메일 주소(placeholder 포함)입니다.
# 예를 들어: emailaddress+%{key}@example.onmicrosoft.com.
# 플레이스홀더는 주소의 "사용자" 부분( `@` 앞의 부분)에 나타나야 합니다.
gitlab_rails['incoming_email_address'] = "incoming+%{key}@example.onmicrosoft.com"
# 이메일 계정 사용자 이름
gitlab_rails['incoming_email_email'] = "incoming@example.onmicrosoft.com"
gitlab_rails['incoming_email_delete_after_delivery'] = false
gitlab_rails['incoming_email_inbox_method'] = 'microsoft_graph'
gitlab_rails['incoming_email_inbox_options'] = {
'tenant_id': '<YOUR-TENANT-ID>',
'client_id': '<YOUR-CLIENT-ID>',
'client_secret': '<YOUR-CLIENT-SECRET>',
'poll_interval': 60 # Optional
}
Microsoft Cloud for US Government 또는 다른 Azure 배포를 사용하는 경우, azure_ad_endpoint
와 graph_endpoint
설정을 구성하세요.
- Microsoft Cloud for US Government용 예시:
gitlab_rails['incoming_email_inbox_options'] = {
'azure_ad_endpoint': 'https://login.microsoftonline.us',
'graph_endpoint': 'https://graph.microsoft.us',
'tenant_id': '<YOUR-TENANT-ID>',
'client_id': '<YOUR-CLIENT-ID>',
'client_secret': '<YOUR-CLIENT-SECRET>',
'poll_interval': 60 # Optional
}
마이크로소프트 그래프 API는 아직 직접 컴파일한 설치에서는 지원되지 않습니다. 자세한 내용은 이 이슈를 참조하세요.
암호화된 자격 증명 사용
- GitLab 15.9에서 도입되었습니다.
수신 이메일 자격 증명을 평문으로 구성 파일에 저장하는 대신 선택적으로 암호화된 파일을 사용할 수 있습니다.
전제 조건:
- 암호화된 자격 증명을 사용하려면 먼저 암호화된 구성을 활성화해야 합니다.
암호화된 파일에 대한 지원되는 구성 항목은 다음과 같습니다:
user
password
-
초기에
/etc/gitlab/gitlab.rb
에서 수신 이메일 구성이 다음과 같이 보였다면:gitlab_rails['incoming_email_email'] = "incoming-email@mail.example.com" gitlab_rails['incoming_email_password'] = "examplepassword"
-
암호화된 시크릿을 편집합니다:
sudo gitlab-rake gitlab:incoming_email:secret:edit EDITOR=vim
-
수신 이메일 시크릿의 비암호화된 내용을 입력합니다:
user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
/etc/gitlab/gitlab.rb
를 편집하고email
및password
에 대한incoming_email
설정을 제거합니다. -
파일을 저장하고 GitLab을 다시 구성합니다:
sudo gitlab-ctl reconfigure
수신 이메일 비밀번호를 저장하기 위해 Kubernetes 시크릿을 사용합니다. 자세한 내용은 Helm IMAP 시크릿을 읽어보세요.
-
초기에
docker-compose.yml
에서 수신 이메일 구성이 다음과 같이 보였다면:version: "3.6" services: gitlab: image: 'gitlab/gitlab-ee:latest' restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | gitlab_rails['incoming_email_email'] = "incoming-email@mail.example.com" gitlab_rails['incoming_email_password'] = "examplepassword"
-
컨테이너 내부로 들어가 암호화된 시크릿을 편집합니다:
sudo docker exec -t <container_name> bash gitlab-rake gitlab:incoming_email:secret:edit EDITOR=editor
-
수신 이메일 시크릿의 비암호화된 내용을 입력합니다:
user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
docker-compose.yml
을 편집하고user
및password
에 대한incoming_email
설정을 제거합니다. -
파일을 저장하고 GitLab을 재시작합니다:
docker compose up -d
-
초기에
/home/git/gitlab/config/gitlab.yml
에서 수신 이메일 구성이 다음과 같이 보였다면:production: incoming_email: user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
암호화된 시크릿을 편집합니다:
bundle exec rake gitlab:incoming_email:secret:edit EDITOR=vim RAILS_ENVIRONMENT=production
-
수신 이메일 시크릿의 비암호화된 내용을 입력합니다:
user: 'incoming-email@mail.example.com' password: 'examplepassword'
-
/home/git/gitlab/config/gitlab.yml
를 편집하고user
및password
에 대한incoming_email:
설정을 제거합니다. -
파일을 저장하고 GitLab 및 Mailroom을 다시 시작합니다:
# systemd를 실행 중인 시스템의 경우 sudo systemctl restart gitlab.target # SysV init를 실행 중인 시스템의 경우 sudo service gitlab restart
문제 해결
Email ingestion doesn’t work in 16.6.0
GitLab Self-Managed 16.6.0
의 리그레이션으로 인해 mail_room
(이메일 수신)의 시작이 방해되는 문제가 있습니다.
서비스 데스크 및 기타 이메일 답장 기능이 작동하지 않습니다.
이 문제를 수정하는 데 기여하는 Issue 432257를 확인하세요.
해결책은 GitLab 설치에 다음 명령을 실행하여 영향을 받는 파일을 패치하는 것입니다:
curl --output /tmp/mailroom.patch --url "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137279.diff"
patch -p1 -d /opt/gitlab/embedded/service/gitlab-rails < /tmp/mailroom.patch
gitlab-ctl restart mailroom
curl --output /tmp/mailroom.patch --url "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137279.diff"
cd /opt/gitlab/embedded/service/gitlab-rails
patch -p1 < /tmp/mailroom.patch
gitlab-ctl restart mailroom