38 lines
1.3 KiB
Rust
38 lines
1.3 KiB
Rust
use lettre::transport::smtp::authentication::Credentials;
|
|
use lettre::{Message, SmtpTransport, Transport};
|
|
use std::env;
|
|
use std::fs;
|
|
|
|
pub async fn send_verification_email(to: &str, code: i32, username: &str) -> Result<(), String> {
|
|
let smtp_user = env::var("SMTP_USER").map_err(|_| "SMTP_USER not set".to_string())?;
|
|
let smtp_pass = env::var("SMTP_PASS").map_err(|_| "SMTP_PASS not set".to_string())?;
|
|
let smtp_server = env::var("SMTP_SERVER").map_err(|_| "SMTP_SERVER not set".to_string())?;
|
|
|
|
// Load template
|
|
let template = fs::read_to_string("res/email/confirmationTemplate.html")
|
|
.map_err(|e| format!("Failed to read email template: {}", e))?;
|
|
|
|
// Replace placeholders
|
|
let body = template
|
|
.replace("{{username}}", username)
|
|
.replace("{{confirmation-code}}", &format!("{:06}", code));
|
|
|
|
let email = Message::builder()
|
|
.from(smtp_user.parse().unwrap())
|
|
.to(to.parse().unwrap())
|
|
.subject("Your Verification Code")
|
|
.header(lettre::message::header::ContentType::TEXT_HTML)
|
|
.body(body)
|
|
.map_err(|e| e.to_string())?;
|
|
|
|
let creds = Credentials::new(smtp_user, smtp_pass);
|
|
|
|
let mailer = SmtpTransport::relay(&smtp_server)
|
|
.map_err(|e| e.to_string())?
|
|
.credentials(creds)
|
|
.build();
|
|
|
|
mailer.send(&email).map_err(|e| e.to_string())?;
|
|
|
|
Ok(())
|
|
}
|