개발 환경에서 이메일 사용하기
GitLab v19.1ActionMailer에서 deliver_later가 호출될 때마다 Sidekiq job이 큐에 추가됩니다. 새 메일러 메서드나 새 메일러를 도입하는 경우에도 동일하게 적용됩니다. 아래 NotificationService 예시에서, 모든 Rails 및 Sidekiq 노드에 업데이트된 코드가 적용되기 전에 배포 중에 이 메일러의 정의에서 인수를 추가하거나 제거하면 문제가 발생할 수 있습니다.
메일러 Sidekiq job과의 호환성 보장#
ActionMailer에서 deliver_later가 호출될 때마다 Sidekiq job이 큐에 추가됩니다.
메일러 인수를 추가하거나 제거해야 하는 경우, 이전 버전 및 이후 버전과의 호환성을 모두 보장하는 것이 중요합니다.
워커의 인수 변경에 관한 Sidekiq 단계를 따르세요.
새 메일러 메서드나 새 메일러를 도입하는 경우에도 동일하게 적용됩니다. 새 워커 추가에 관한 단계를 따르세요. 여기에는 배포 후 문제가 발생했을 때 새 메일러를 비활성화할 수 있도록 새 메서드를 기능 플래그로 감싸는 것도 포함됩니다.
아래 NotificationService 예시에서,
모든 Rails 및 Sidekiq 노드에 업데이트된 코드가 적용되기 전에 배포 중에 이 메일러의 정의에서 인수를 추가하거나 제거하면 문제가 발생할 수 있습니다.
mailer.unknown_sign_in_email(user, ip, time).deliver_later
발송된 이메일#
개발 인스턴스에서 "발송된" 렌더링 이메일을 보려면
/rails/letter_opener를 방문하세요.
S/MIME 서명된 이메일은
현재 letter_opener로는 미리볼 수 없습니다.
메일러 미리보기#
Rails는 샘플 데이터를 사용하여 HTML 및 일반 텍스트 형식으로 메일러 템플릿을 미리볼 수 있는 방법을 제공합니다.
미리보기는 app/mailers/previews에 위치하며,
/rails/mailers에서 확인할 수 있습니다.
자세한 내용은 Rails 가이드를 참조하세요.
수신 이메일#
-
GitLab 설치 디렉터리로 이동합니다.
-
config/gitlab.yml에서incoming_email섹션을 찾아 기능을 활성화하고, 사용하는 IMAP 서버와 이메일 계정에 맞는 세부 정보를 입력합니다.Gmail / Google Apps 구성, 메일함
gitlab-incoming@gmail.com기준:
incoming_email:
enabled: true
# The email address including the %{key} placeholder that will be replaced to reference the
# item being replied to. This %{key} should be included in its entirety within the email
# address and not replaced by another value.
# For example: emailaddress+%{key}@gmail.com.
# The placeholder must appear in the "user" part of the address (before the `@`). It can be omitted but some features,
# including Service Desk, may not work properly.
address: "gitlab-incoming+%{key}@gmail.com"
# Email account username
# With third party providers, this is usually the full email address.
# With self-hosted email servers, this is usually the user part of the email address.
user: "gitlab-incoming@gmail.com"
# Email account password
password: "[REDACTED]"
# IMAP server host
host: "imap.gmail.com"
# IMAP server port
port: 993
# Whether the IMAP server uses SSL
ssl: true
# Whether the IMAP server uses StartTLS
start_tls: false
# The mailbox where incoming mail will end up. Usually "inbox".
mailbox: "inbox"
# The IDLE command timeout.
idle_timeout: 60
# Whether to expunge (permanently remove) messages from the mailbox when they are marked as deleted after delivery
expunge_deleted: false
언급된 대로, + 이후의 부분은 무시되며 이 메시지는 gitlab-incoming@gmail.com의 메일함으로 전송됩니다.
-
계속 진행하기 전에 올바른 버전의 MailRoom이 설치되어 있는지 확인하기 위해 MailRoom Gem 업데이트 섹션을 먼저 읽어보세요. 요약하자면,
Gemfile의gitlab-mail_room버전을 최신gitlab-mail_room으로 일시적으로 업데이트하고bundle install을 실행해야 합니다. 이는 임시 해결책이므로 이 변경 사항은 커밋하지 마세요. -
GitLab 루트 디렉터리에서 다음 명령어를 실행하여
mail_room을 실행합니다:
bundle exec mail_room -q -c config/mail_room.yml
- 모든 것이 올바르게 구성되었는지 확인합니다:
bundle exec rake gitlab:incoming_email:check RAILS_ENV=development
- 이제 이메일 답장 기능이 작동해야 합니다.
이메일 네임스페이스#
GitLab은 이메일 핸들러 주소의 새로운 형식을 지원합니다. 이는 catch-all 메일함을 지원하기 위해 도입되었습니다.
새 이메일 핸들러가 필요한 기능을 구현해야 하는 경우, 이메일 키 형식에 관한 다음 규칙을 따르세요:
-
액션은 항상 끝에 위치하며
-로 구분됩니다. 예:-issue또는-merge-request -
기능이 프로젝트와 관련된 경우, 키는 프로젝트 식별자(프로젝트 경로 슬러그와 프로젝트 ID)로 시작하며
-로 구분됩니다. 예:gitlab-org-gitlab-foss-20 -
작성자 토큰과 같은 추가 정보는 프로젝트 식별자와 액션 사이에
-로 구분하여 추가할 수 있습니다. 예:gitlab-org-gitlab-foss-20-Author_Token12345678-issue -
핸들러는
lib/gitlab/email/handler.rb에 등록합니다.
유효한 이메일 키 예시:
-
gitlab-org-gitlab-foss-20-Author_Token12345678-issue(새 이슈 생성) -
gitlab-org-gitlab-foss-20-Author_Token12345678-merge-request(새 머지 리퀘스트 생성) -
1234567890abcdef1234567890abcdef-unsubscribe(대화 구독 취소) -
1234567890abcdef1234567890abcdef(대화에 답장)
-issue- 액션은 GitLab에서 Service Desk 기능의 핸들러로 사용됩니다.
레거시 형식#
이전 레거시 형식은 계속 지원하지만, 새로운 기능에는 레거시 형식을 사용하지 않아야 합니다. 이메일 핸들러에 유효한 레거시 형식은 다음과 같습니다:
-
path/to/project+namespace -
path/to/project+namespace+action -
namespace -
namespace+action
GitLab에서 Service Desk 기능의 핸들러는 path/to/project입니다.
MailRoom Gem 업데이트#
필요할 때 Gem을 빠르게 업데이트할 수 있도록, MailRoom의 포크인
gitlab-mail_room을 사용합니다.
변경 사항을 가능한 한 빨리 업스트림에 반영하고 두 프로젝트를 동기화 상태로 유지하려고 합니다.
MailRoom을 업데이트하려면:
-
GitLab Rails의
Gemfile을 업데이트합니다(예시 머지 리퀘스트 참조). -
Helm Chart 구성을 업데이트합니다(예시 머지 리퀘스트 참조).