use actix_web::Responder;
use lettre::message::Mailbox;
use lettre::*;
use lettre::address::Address;
use lettre::transport::smtp::authentication::Credentials;
use lettre_email::EmailBuilder;
use crate::verification::*;
use crate::secrets::*;
pub async fn send_verification_email(request: VerificationRequest) -> Result<(), String> {
let creds = Credentials::new(
format!("{}@{}", EMAIL_USERNAME, EMAIL_DOMAIN),
EMAIL_PASSWORD.to_string()
);
let mailer = SmtpTransport::starttls_relay("mail.cock.li")
.unwrap()
.credentials(creds)
.build();
let email = Message::builder()
.from(
Mailbox::new(
Some(VERIFY_EMAIL_NICKNAME.to_string()),
Address::new(EMAIL_USERNAME.to_string(), EMAIL_DOMAIN.to_string()).unwrap()
)
)
.to(
Mailbox::new(
Some(request.minecraft_username.clone()),
Address::new(request.email.clone(), "st-andrews.ac.uk").unwrap()
)
)
.subject(VERIFY_EMAIL_SUBJECT)
.body(
VERIFY_EMAIL_BODY_1.to_string() + &request.as_code() + VERIFY_EMAIL_BODY_2
)
.unwrap();
println!("Sending email...");
match mailer.send(&email) {
Ok(_) => Ok(()),
Err(e) => Err(format!("Failed to send email: {}", e))
}
}
pub async fn send_written_reason_email(request: WrittenReasonRequest) -> Result<(), String> {
let creds = Credentials::new(
format!("{}@{}", EMAIL_USERNAME, EMAIL_DOMAIN),
EMAIL_PASSWORD.to_string()
);
let mailer = SmtpTransport::starttls_relay("mail.cock.li")
.unwrap()
.credentials(creds)
.build();
let email = Message::builder()
.from(
Mailbox::new(
Some(VERIFY_EMAIL_NICKNAME.to_string()),
Address::new(EMAIL_USERNAME.to_string(), EMAIL_DOMAIN.to_string()).unwrap()
)
)
.to(
Mailbox::new(
Some(request.minecraft_username.clone()),
Address::new("walchuk2018", "icloud.com").unwrap()
)
)
.subject("Request from ".to_string() + &request.minecraft_username)
.body(
format!("{:?}", request)
)
.unwrap();
println!("Sending email...");
match mailer.send(&email) {
Ok(_) => Ok(()),
Err(e) => Err(format!("Failed to send email: {}", e))
}
}