docs: 이메일 설정 가이드 및 작업 이력 업데이트

- SETUP_GUIDE.md: Gmail SMTP 설정 방법, Google Groups 발신자 설정 추가
- CURRENT_WORKS.md: 2025-12-01 비밀번호 자동 생성/이메일 발송 작업 이력
- INDEX.md: 작업 이력 및 최종 업데이트일 갱신
This commit is contained in:
2025-12-01 11:07:58 +09:00
parent 85cbe23782
commit ea7498ae96
3 changed files with 119 additions and 1 deletions

View File

@@ -1508,3 +1508,82 @@ ### Git 커밋:
- 17 files changed, 1476 insertions(+), 4 deletions(-)
---
## 2025-12-01 (일) - 사용자 비밀번호 자동 생성 및 이메일 발송 기능
### 주요 작업
- 사용자 등록 시 비밀번호 입력 필드 제거 → 임의 비밀번호 자동 생성 후 이메일 발송
- 사용자 수정 페이지에 비밀번호 초기화 버튼 추가
- 사용자 모달에 비밀번호 초기화 버튼 추가
- 사용자 모달 프로필 이미지 없을 때 이름 첫글자 표시 (한글 지원: `mb_strtoupper`)
### 추가된 파일:
#### Mail
- `app/Mail/UserPasswordMail.php` - 비밀번호 알림 Mailable 클래스
- 신규 사용자 / 비밀번호 초기화 구분 (`$isNewUser`)
- 제목: `[SAM] 계정이 생성되었습니다` / `[SAM] 비밀번호가 초기화되었습니다`
- `resources/views/emails/user-password.blade.php` - 이메일 템플릿
- 스타일링된 HTML 이메일
- 사용자 이름, 이메일, 임시 비밀번호 표시
- 첫 로그인 후 비밀번호 변경 안내
### 수정된 파일:
#### Service
- `app/Services/UserService.php`
- `createUser()`: 비밀번호 자동 생성 + 이메일 발송
- `resetPassword()`: 비밀번호 초기화 + 이메일 발송 (신규 메서드)
- `generateRandomPassword()`: 8자리 임의 비밀번호 생성 (혼동 문자 제외: 0, O, l, 1, I)
- `sendPasswordMail()`: 이메일 발송 헬퍼 메서드
#### Controller
- `app/Http/Controllers/Api/Admin/UserController.php`
- `resetPassword()`: 비밀번호 초기화 엔드포인트 추가
- 슈퍼관리자 보호: 일반 관리자가 슈퍼관리자 비밀번호 초기화 불가
#### Request
- `app/Http/Requests/StoreUserRequest.php`
- password 필드 검증 주석 처리 (자동 생성으로 변경)
#### Routes
- `routes/api.php`
- `POST /api/admin/users/{id}/reset-password` 라우트 추가
#### Views
- `resources/views/users/create.blade.php`
- 비밀번호 입력 필드 제거 → 안내 메시지 표시
- "임시 비밀번호가 생성되어 사용자 이메일로 발송됩니다"
- `resources/views/users/edit.blade.php`
- 비밀번호 입력 필드 제거 → 초기화 버튼으로 변경
- HTMX 대신 Fetch API 사용 (버튼 상태 관리)
- `resources/views/users/partials/modal-info.blade.php`
- 프로필 이미지 없을 때: `strtoupper(substr())` → `mb_strtoupper(mb_substr())` (한글 지원)
- 비밀번호 초기화 버튼 추가 (삭제된 사용자 제외)
#### JavaScript
- `public/js/user-modal.js`
- `resetPassword()`: 비밀번호 초기화 메서드 추가
- confirm 다이얼로그 후 API 호출
### API 엔드포인트:
- `POST /api/admin/users/{id}/reset-password`
- 성공: `{ success: true, message: "비밀번호가 초기화되어 이메일로 발송되었습니다." }`
- 실패 (슈퍼관리자 보호): `{ success: false, message: "슈퍼관리자의 비밀번호는 초기화할 없습니다." }`
### 이메일 설정:
- Gmail SMTP 사용 (`smtp.gmail.com:587`)
- Google Groups 이메일 발신자 지원 (Gmail "다른 주소에서 메일 보내기" 설정 필요)
- 설정 가이드: `docs/SETUP_GUIDE.md` 참조
### 코드 품질:
- ✅ Laravel Pint 통과
- ✅ PHP 문법 검사 통과
### Git 커밋:
- ✅ `85cbe23` "feat: [users] 사용자 등록 비밀번호 자동 생성 이메일 발송"
---

View File

@@ -275,8 +275,17 @@ ## 📝 작업 이력
- 문서: MNG_CRITICAL_RULES.md, TROUBLESHOOTING.md 추가
- **Phase 4 완료**: 시스템 관리 메뉴 5개 완성 (60+ 파일, 5,000+ 줄)
**2025-12-01 (일)**
- 사용자 관리 비밀번호 기능 개선
- 사용자 생성: 비밀번호 입력 제거 → 자동 생성 후 이메일 발송
- 사용자 수정: 비밀번호 변경 → 비밀번호 초기화 버튼으로 대체
- 사용자 모달: 비밀번호 초기화 버튼 추가
- Gmail SMTP 이메일 설정 (Google Groups 발신자)
- 프로필 이미지 없을 때 이름 첫 글자 표시 (한글 지원: mb_* 함수)
- 문서: SETUP_GUIDE.md 이메일 설정 섹션 추가
---
**최종 업데이트**: 2025-11-24
**최종 업데이트**: 2025-12-01
**버전**: 2.0
**상태**: Phase 4 완료, Phase 5 준비 중

View File

@@ -80,8 +80,38 @@ ### Step 2: 환경 변수 설정
SESSION_DRIVER=file
SANCTUM_STATEFUL_DOMAINS=mng.sam.kr
# 이메일 설정 (Gmail SMTP)
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your-email@gmail.com
MAIL_FROM_NAME="${APP_NAME}"
```
### 이메일 설정 (Gmail SMTP)
사용자 등록 시 임시 비밀번호 발송, 비밀번호 초기화 등 이메일 기능을 사용하려면 SMTP 설정이 필요합니다.
**Gmail 앱 비밀번호 발급:**
1. Google 계정 → 보안 → 2단계 인증 활성화
2. 앱 비밀번호 생성 (https://myaccount.google.com/apppasswords)
3. 생성된 16자리 비밀번호를 `MAIL_PASSWORD`에 입력
**Google Groups 이메일 사용 (발신자 변경):**
- Google Groups 이메일(예: `develop@company.com`)을 발신자로 사용하려면:
1. Gmail 설정 → 계정 및 가져오기 → 다른 주소에서 메일 보내기
2. 그룹 이메일 주소 추가 및 인증
3. `.env``MAIL_FROM_ADDRESS`를 그룹 이메일로 설정
**주의사항:**
- `MAIL_USERNAME`은 실제 Gmail 계정 (SMTP 인증용)
- `MAIL_FROM_ADDRESS`는 발신자 표시 주소 (Gmail에서 "다른 주소에서 메일 보내기" 설정 필요)
- 앱 비밀번호는 일반 비밀번호가 아닌 Google에서 생성한 16자리 코드
### Step 3: Tailwind + DaisyUI 설정
**mng/tailwind.config.js**