id(); $table->uuid()->unique(); // The name a purpose points at. Free-form: the five seeded ones are // a starting point, not a ceiling. $table->string('key', 48)->unique(); $table->string('address'); $table->string('display_name')->nullable(); // Null means "same as address", which is the usual case and saves // typing the address twice. $table->string('username')->nullable(); // Ciphertext under SECRETS_KEY. Nullable so a mailbox can exist on // the page before anyone has typed its password. $table->text('password')->nullable(); // Suppresses Reply-To. A "no-reply" you can reply to is a lie in // the sender. $table->boolean('no_reply')->default(false); $table->boolean('active')->default(true); // When the test send last succeeded. Null is honest: it means // nobody has proven these credentials work, not that they are bad. $table->timestamp('last_verified_at')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('mailboxes'); } };