56 lines
1.8 KiB
Rust
56 lines
1.8 KiB
Rust
use dotenvy::var;
|
|
use lettre::{
|
|
message::{header::{ContentType, HeaderName, HeaderValue},Mailbox},
|
|
transport::smtp::authentication::Credentials,
|
|
Message, SmtpTransport, Transport,
|
|
};
|
|
|
|
fn create_mailer() -> SmtpTransport {
|
|
// Get the server settings from the env file
|
|
let smtp_server_name = var("SMTP_SERVER_NAME").expect("SMTP_SERVER_NAME not set");
|
|
//let smtp_server_port = var("SMTP_SERVER_PORT").expect("SMTP_SERVER_PORT not set");
|
|
|
|
// Get the username and password from the env file
|
|
let username = var("EMAIL_USERNAME").expect("EMAIL_USERNAME not set");
|
|
let password = var("EMAIL_PASSWORD").expect("EMAIL_PASSWORD not set");
|
|
|
|
// Create the credentials
|
|
let creds = Credentials::new(username, password);
|
|
|
|
// Create a connection to our email provider
|
|
// In this case, we are using Namecheap's Private Email
|
|
// You can use any email provider you want
|
|
SmtpTransport::relay(&smtp_server_name)
|
|
.unwrap()
|
|
.credentials(creds)
|
|
.build()
|
|
}
|
|
|
|
pub fn send_emails(subject: String, recipients: String, body: String) {
|
|
let username = var("EMAIL_USERNAME").expect("EMAIL_USERNAME not set");
|
|
|
|
// Build the email
|
|
let mut email = Message::builder()
|
|
.from(username.parse::<Mailbox>().unwrap())
|
|
.to(username.parse::<Mailbox>().unwrap())
|
|
.subject(subject)
|
|
.header(ContentType::TEXT_HTML)
|
|
.body(body)
|
|
.unwrap();
|
|
|
|
let headers = email.headers_mut();
|
|
|
|
//headers.set(To(recipients));
|
|
headers.insert_raw(HeaderValue::new(HeaderName::new_from_ascii_str("To"), recipients.to_owned()));
|
|
|
|
let mailer = create_mailer();
|
|
|
|
// TODO: Add logging
|
|
// Send the email
|
|
match mailer.send(&email) {
|
|
Ok(_) => println!("Basic email sent!"),
|
|
Err(error) => {
|
|
println!("Basic email failed to send. {:?}", error);
|
|
}
|
|
}
|
|
} |