feat: Add admin commands for managing users' email addresses

This commit is contained in:
Ginger
2026-03-31 02:20:59 +00:00
committed by Ellis Git
parent 7e79a544cf
commit 955da3a74f
16 changed files with 281 additions and 48 deletions
+7 -7
View File
@@ -8,8 +8,8 @@ pub trait MessageTemplate: Template {
#[derive(Template)]
#[template(path = "mail/change_email.txt.j2")]
pub struct ChangeEmail<'a> {
user_id: &'a UserId,
verification_link: &'a str,
pub user_id: &'a UserId,
pub verification_link: String,
}
impl MessageTemplate for ChangeEmail<'_> {
@@ -19,8 +19,8 @@ impl MessageTemplate for ChangeEmail<'_> {
#[derive(Template)]
#[template(path = "mail/new_account.txt.j2")]
pub struct NewAccount<'a> {
server_name: &'a str,
verification_link: &'a str,
pub server_name: &'a str,
pub verification_link: String,
}
impl MessageTemplate for NewAccount<'_> {
@@ -30,9 +30,9 @@ impl MessageTemplate for NewAccount<'_> {
#[derive(Template)]
#[template(path = "mail/password_reset.txt.j2")]
pub struct PasswordReset<'a> {
display_name: &'a str,
user_id: &'a UserId,
verification_link: &'a str,
pub display_name: Option<&'a str>,
pub user_id: &'a UserId,
pub verification_link: String,
}
impl MessageTemplate for PasswordReset<'_> {
+7 -1
View File
@@ -3,7 +3,7 @@ use std::sync::Arc;
use conduwuit::{Err, Result, err, info};
use lettre::{
AsyncSmtpTransport, AsyncTransport, Tokio1Executor,
message::{Mailbox, MessageBuilder},
message::{Mailbox, MessageBuilder, header::ContentType},
};
use crate::{Args, mailer::messages::MessageTemplate};
@@ -65,6 +65,11 @@ impl Service {
.as_ref()
.map(|(sender, transport)| Mailer { sender, transport })
}
pub fn expect_mailer(&self) -> Result<Mailer<'_>> {
self.mailer()
.ok_or_else(|| err!("SMTP is not configured on this server"))
}
}
pub struct Mailer<'a> {
@@ -89,6 +94,7 @@ impl Mailer<'_> {
.to(recipient)
.subject(subject)
.date_now()
.header(ContentType::TEXT_PLAIN)
.body(body)
.expect("should have been able to construct message");