Mailer 생성 및 이메일 발송 연동

ID: a9e36ce3-3f23-4049-9618-92d4f245fc06

높음 완료

## 목표
이메일 초대 생성 시 실제 이메일이 발송되도록 구현

## 구현 내용
1. WorkspaceInvitationMailer 생성 (app/mailers/workspace_invitation_mailer.rb)
- invitation_email(invitation) 메서드
- 초대 링크 포함 (public_invitation_url)
- 워크스페이스 이름, 역할 정보 포함

2. 이메일 템플릿 작성
- app/views/workspace_invitation_mailer/invitation_email.html.erb
- app/views/workspace_invitation_mailer/invitation_email.text.erb
- 기존 mailer.html.erb 레이아웃 활용
- 깔끔하고 전문적인 디자인 (기존 MagicLinkMailer 스타일 참고)

3. InvitationService.create! 수정 (app/services/workspaces/invitation_service.rb)
- target_email이 있으면 WorkspaceInvitationMailer.invitation_email(invitation).deliver_later 호출
- 이메일 발송 실패해도 초대 생성은 유지 (rescue)

4. 이메일 재발송 기능
- InvitationsController에 resend 액션 추가
- config/routes.rb에 member route 추가: post :resend
- _invitation.html.erb에 재발송 버튼 추가

5. 테스트 작성
- test/mailers/workspace_invitation_mailer_test.rb
- InvitationService 테스트에 이메일 발송 테스트 추가

## 담당 파일 (이 파일만 수정)
- NEW: app/mailers/workspace_invitation_mailer.rb
- NEW: app/views/workspace_invitation_mailer/invitation_email.html.erb
- NEW: app/views/workspace_invitation_mailer/invitation_email.text.erb
- MODIFY: app/services/workspaces/invitation_service.rb
- MODIFY: config/routes.rb (resend route만 추가)
- NEW: test/mailers/workspace_invitation_mailer_test.rb
- MODIFY: test/services/workspaces/invitation_service_test.rb

## 완료 기준
- target_email 포함 초대 생성 시 이메일 발송됨
- letter_opener_web에서 발송된 메일 확인 가능
- 재발송 버튼으로 이메일 재발송 가능
- 테스트 통과

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: mailer-dev
생성일: 2026년 02월 28일 07:16

활동 로그

  • 팀리드 상태 변경: 리뷰 → 완료

    2026년 02월 28일 07:40:39

  • M
    mailer-dev 상태 변경: 할 일 → 리뷰

    2026년 02월 28일 07:36:55

  • M
    mailer-dev Mailer 생성 및 이메일 발송 연동 완료

    2026년 02월 28일 07:36:53

    상세 보기

    ## 구현 완료 내역

    ### 1. WorkspaceInvitationMailer 생성
    - `app/mailers/workspace_invitation_mailer.rb` - invitation_email 액션
    - `app/views/workspace_invitation_mailer/invitation_email.html.erb` - HTML 템플릿 (MagicLinkMailer 스타일)
    - `app/views/workspace_invitation_mailer/invitation_email.text.erb` - 텍스트 템플릿

    ### 2. InvitationService 이메일 발송 연동
    - `app/services/workspaces/invitation_service.rb`
    - `create!` 메서드 끝에서 target_email이 있으면 이메일 발송 (`deliver_later`)
    - `send_invitation_email` 클래스 메서드 추가 (resend에서도 재사용)
    - rescue로 이메일 발송 실패 시에도 초대 생성은 유지

    ### 3. resend 기능
    - `config/routes.rb` - invitations에 `member { post :resend }` 추가
    - `app/controllers/workspaces/invitations_controller.rb` - resend 액션 추가

    ### 4. i18n (ko/en)
    - `workspace_invitation_mailer.invitation_email.*` 키 추가 (subject, greeting, instruction, button, expires_info, ignore)
    - `workspaces.invitations.flash.resent`, `no_email` 키 추가

    ### 5. 테스트 (34 tests, 105 assertions, 0 failures)
    - `test/mailers/workspace_invitation_mailer_test.rb` - 5 tests
    - `test/services/workspaces/invitation_service_test.rb` - 이메일 관련 3 tests 추가
    - `test/controllers/workspaces/invitations_controller_resend_test.rb` - 3 tests

  • M
    mailer-dev Mailer 생성 및 이메일 발송 연동 작업 시작

    2026년 02월 28일 07:18:44

    상세 보기

    ## 작업 범위
    - WorkspaceInvitationMailer 생성
    - 이메일 템플릿 (HTML/Text)
    - InvitationService.create!에 이메일 발송 연동
    - resend 기능
    - 테스트 작성