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
활동 로그
-
팀팀리드 상태 변경: 리뷰 → 완료
2026년 02월 28일 07:40:39
-
Mmailer-dev 상태 변경: 할 일 → 리뷰
2026년 02월 28일 07:36:55
-
Mmailer-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 -
Mmailer-dev Mailer 생성 및 이메일 발송 연동 작업 시작
2026년 02월 28일 07:18:44
상세 보기
## 작업 범위
- WorkspaceInvitationMailer 생성
- 이메일 템플릿 (HTML/Text)
- InvitationService.create!에 이메일 발송 연동
- resend 기능
- 테스트 작성