InviteMail.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace App\Mail;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Mail\Mailable;
  5. use Illuminate\Mail\Mailables\Content;
  6. use Illuminate\Mail\Mailables\Envelope;
  7. use Illuminate\Queue\SerializesModels;
  8. /**
  9. * Class InviteMail
  10. *
  11. * 用于发送邀请注册链接的邮件。
  12. * 支持多语言模板,并可自定义 Dashboard 基础地址。
  13. */
  14. class InviteMail extends Mailable
  15. {
  16. use Queueable, SerializesModels;
  17. /**
  18. * 邀请唯一标识(用于生成注册链接)
  19. */
  20. public string $uuid;
  21. /**
  22. * 邮件语言(用于选择 view 模板)
  23. * 例如:en、zh-Hans、zh-Hant
  24. */
  25. public string $lang;
  26. /**
  27. * Dashboard 基础访问地址
  28. */
  29. public string $dashboardUrl;
  30. /**
  31. * Create a new message instance.
  32. *
  33. * @param string $uuid 邀请 UUID
  34. * @param string $lang 邮件语言(默认 en)
  35. * @param string|null $dashboardUrl Dashboard 基础地址(可选)
  36. */
  37. public function __construct(
  38. string $uuid,
  39. string $lang = 'en',
  40. ?string $dashboardUrl = null
  41. ) {
  42. $this->uuid = $uuid;
  43. $this->lang = $lang;
  44. // 如果未传入 Dashboard 地址,则使用配置项
  45. $this->dashboardUrl = $dashboardUrl
  46. ?: config('mint.server.dashboard_base_path');
  47. }
  48. /**
  49. * Get the message envelope.
  50. *
  51. * 用于定义邮件头信息(如 subject、from、reply-to 等)。
  52. */
  53. public function envelope(): Envelope
  54. {
  55. return new Envelope(
  56. subject: 'Wikipali Invite Email',
  57. );
  58. }
  59. /**
  60. * Get the message content definition.
  61. *
  62. * 用于定义邮件内容视图及其绑定的数据。
  63. */
  64. public function content(): Content
  65. {
  66. return new Content(
  67. view: 'emails.invite.' . $this->lang,
  68. with: [
  69. // 邀请注册链接
  70. 'url' => $this->dashboardUrl
  71. . '/anonymous/users/sign-up/'
  72. . $this->uuid,
  73. ],
  74. );
  75. }
  76. }