EmailController.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace App\Http\Controllers\V1;
  3. use App\Models\User;
  4. use App\Services\Api\ErrorMsgServive;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Carbon;
  7. use Illuminate\Support\Facades\Mail;
  8. use App\Models\MailCode;
  9. use Illuminate\Support\Facades\Validator;
  10. class EmailController extends Controller
  11. {
  12. /**
  13. 发送邮箱验证码
  14. 在 .env 文件配置如下,可测试邮件发送(最好自己申请一个邮箱获取信息)
  15. MAIL_MAILER=smtp
  16. MAIL_HOST=ssl://smtp.163.com
  17. MAIL_PORT=465
  18. MAIL_USERNAME=18738190585@163.com
  19. MAIL_PASSWORD=VIBTDHQAYLKJYIGC
  20. MAIL_ENCRYPTION=
  21. MAIL_FROM_ADDRESS=18738190585@163.com
  22. MAIL_FROM_NAME="${APP_NAME}"
  23. *
  24. * @param Request $request
  25. * @return \Illuminate\Http\JsonResponse
  26. */
  27. public function sendEmailCode(Request $request)
  28. {
  29. $email = $request->input('email');
  30. $validator = Validator::make($request->all(), [
  31. 'email' => 'required|email',
  32. ]);
  33. if ($validator->fails()) {
  34. return $this->error($validator->errors()->first());
  35. }
  36. $code = rand(1000, 9999);
  37. $notice = '本次验证码是' . '【 ' . $code . ' 】 ' . '有效期 5 分钟';
  38. $subject = '邮箱验证通知';
  39. try {
  40. Mail::raw($notice, function ($message) use ($email, $subject) {
  41. $message->subject($subject);
  42. $message->to($email);
  43. });
  44. $mailCode = new MailCode();
  45. $mailCode->account = $email;
  46. $mailCode->code = $code;
  47. $mailCode->state = 0;
  48. $mailCode->created_at = date('Y-m-d H:i:s');
  49. $mailCode->save();
  50. return $this->success();
  51. } catch (\Exception $e) {
  52. return $this->error($e->getMessage());
  53. }
  54. }
  55. //判断邮箱验证码 5分钟有效期 (这不是个API接口:哪里需要就放到哪里验证)
  56. public static function isEmailCodeRight($email, $code)
  57. {
  58. $result = MailCode::query()
  59. ->where('account', $email)
  60. ->where('code', $code)
  61. ->where('state', 0)
  62. ->where('created_at', '>', Carbon::now()->subMinutes(5))
  63. ->orderBy('id', 'desc')
  64. ->first();
  65. if (!$result) {
  66. return false;
  67. }
  68. $result->state = 1; //验证通过就失效
  69. $result->save();
  70. return true;
  71. }
  72. }