# คู่มือการตั้งค่าระบบส่ง Email แบบประเมิน

## 📋 สิ่งที่สร้างขึ้นมา

1. ✅ **Mail Class**: `app/Mail/SurveyInvitationMail.php`
2. ✅ **Email Template**: `resources/views/emails/survey-invitation.blade.php`
3. ✅ **Controller Updates**: แก้ไข `ServiceRequestController` และ `SurveyController`
4. ✅ **Routes**: เพิ่ม route `/survey/{token}` สำหรับทำแบบประเมิน
5. ✅ **Survey Views**: สร้าง views สำหรับแสดงและทำแบบประเมิน

## 🚀 วิธีการทดสอบระบบ Email

### 1. ทดสอบใน Development (ใช้ Log Driver)

#### ตั้งค่าใน `.env`:
```env
MAIL_MAILER=log
APP_URL=http://localhost
```

#### รันคำสั่ง:
```bash
php artisan serve
```

#### ทดสอบการส่งแบบประเมิน:
1. เข้าระบบ Admin
2. ไปที่ "ส่งแบบประเมิน"
3. เลือกแบบประเมินและผู้ใช้
4. กดส่ง

#### ตรวจสอบ Email ใน Log:
```bash
# ดูไฟล์ log
tail -f storage/logs/laravel.log

# หรือ
cat storage/logs/laravel.log | grep "Survey invitation email sent"
```

คุณจะเห็น email content ในไฟล์ log!

---

### 2. ทดสอบด้วย SMTP (Gmail)

#### ตั้งค่าใน `.env`:
```env
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="ระบบประเมินความพึงพอใจ"
```

#### สร้าง Gmail App Password:
1. ไปที่: https://myaccount.google.com/security
2. เปิด **2-Step Verification**
3. สร้าง **App Password** สำหรับ Mail
4. วางรหัส 16 หลักใน `.env`

#### ทดสอบ:
1. ตั้งค่า `.env` ตามด้านบน
2. รัน `php artisan config:clear`
3. ส่งแบบประเมินจากระบบ Admin
4. ตรวจสอบ inbox ของผู้ใช้

---

## 📧 ตัวอย่าง Email ที่จะได้รับ

Email จะมีเนื้อหาประกอบด้วย:
- ✅ ชื่อผู้รับแบบประเมิน
- ✅ ชื่อแบบประเมินและรายละเอียด
- ✅ ผลิตภัณฑ์ (Model Name)
- ✅ รหัสคำขอรับบริการ (Service Request Code)
- ✅ วันที่หมดอายุ
- ✅ ปุ่มสำหรับทำแบบประเมิน
- ✅ URL สำรอง (คัดลอกไปเปิด)

---

## 🔧 การปรับแต่ง Email Template

แก้ไขไฟล์: `resources/views/emails/survey-invitation.blade.php`

สามารถปรับแต่ง:
- สีและดีไซน์
- ข้อความ
- รูปแบบการแสดงผล
- เพิ่มโลโก้ขององค์กร

---

## 🧪 Testing Checklist

- [ ] ทดสอบ Log Driver (ดู email ใน log file)
- [ ] ทดสอบ SMTP Driver (ส่ง email จริง)
- [ ] ตรวจสอบว่า email แสดงข้อมูลครบถ้วน
- [ ] ทดสอบลิงก์ใน email ว่าทำงานได้
- [ ] ทดสอบหน้าแสดงแบบประเมิน (survey/take)
- [ ] ทดสอบการ submit คำตอบ
- [ ] ทดสอบ error handling (หมดอายุ, เสร็จแล้ว)

---

## 📝 Log Files ที่เกี่ยวข้อง

### ตรวจสอบการส่ง Email สำเร็จ:
```bash
grep "Survey invitation email sent" storage/logs/laravel.log
```

### ตรวจสอบ Error ในการส่ง Email:
```bash
grep "Failed to send survey invitation email" storage/logs/laravel.log
```

---

## 🎯 สิ่งที่ระบบจะทำอัตโนมัติ

เมื่อ Admin ส่งแบบประเมิน:

1. ✅ สร้าง `SurveyInvitation` ในฐานข้อมูล
2. ✅ สร้าง Token เพื่อใช้เข้าถึงแบบประเมิน
3. ✅ กำหนดวันหมดอายุ (7 วัน ตาม config)
4. ✅ **ส่ง Email ไปยังผู้ใช้ทันที**
5. ✅ บันทึก timestamp (`email_sent_at`)
6. ✅ **อัปเดตสถานะเป็น 'opened' เมื่อเปิด email**
7. ✅ บันทึก timestamp (`email_opened_at`)

---

## ⚠️ ข้อควรระวัง

### 1. Email Limit (Gmail)
- Gmail จำกัดการส่ง email ~500 ฉบับต่อวัน
- ถ้าต้องการส่งมากกว่านั้น ใช้บริการอื่น เช่น SendGrid, Mailgun

### 2. Email ถูกจัดเป็น Spam
- เพิ่ม SPF/DKIM records ใน DNS
- ใช้ Email Address ที่น่าเชื่อถือ
- หลีกเลี่ยงคำที่ถูกตรวจจับว่าเป็น Spam

### 3. Performance
- ถ้ามีการส่ง email จำนวนมาก ควรใช้ Queue
- รันคำสั่ง: `php artisan queue:work`

---

## 🔗 Related Files

- `app/Mail/SurveyInvitationMail.php` - Mail Class
- `app/Http/Controllers/ServiceRequestController.php` - Logic การส่ง email
- `app/Http/Controllers/SurveyController.php` - Logic แสดงแบบประเมิน
- `routes/web.php` - Route สำหรับทำแบบประเมิน
- `resources/views/emails/survey-invitation.blade.php` - Email Template
- `resources/views/survey/take.blade.php` - หน้าทำแบบประเมิน
- `config/mail.php` - การตั้งค่า Mail

---

## 📞 ติดต่อขอความช่วยเหลือ

ถ้ามีปัญหาหรือต้องการความช่วยเหลือ:
1. ตรวจสอบ `storage/logs/laravel.log`
2. ตรวจสอบ `.env` ว่าตั้งค่าถูกต้อง
3. รัน `php artisan config:clear`
4. ลองใช้ Log Driver ก่อนเพื่อตรวจสอบว่าโค้ดทำงานถูกต้อง

