EmailController.php 2.3 KB

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