attempt at fixing confirmation emails by setting email headers, link for manual confirmation email and cut next release #29

Merged
ben merged 8 commits from ben/Jobboerse:main into main 2022-06-10 15:36:51 +02:00
Showing only changes of commit d3c52fb4aa - Show all commits

cleanup email a bit

Bennet Bleßmann 2022-06-10 14:48:40 +02:00 committed by Bennet Bleßmann
Signed by: ben
GPG key ID: 3BE1A1A3CBC3CF99

View file

@ -3,11 +3,38 @@ use crate::server_config::EmailConfig;
use crate::template;
use crate::util::SerializableUrl;
use handlebars::Handlebars;
use lettre::message::header::{Header, HeaderName, HeaderValue};
use lettre::message::header::{Header, HeaderName, HeaderValue, UserAgent};
use lettre::message::{Mailbox, SinglePart};
use lettre::{Address, AsyncTransport};
use log::warn;
#[derive(Clone, Debug)]
struct AutoGeneratedHeader(String);
impl Default for AutoGeneratedHeader {
fn default() -> Self {
Self("auto-generated".into())
}
}
impl Header for AutoGeneratedHeader {
fn name() -> HeaderName {
HeaderName::new_from_ascii_str("Auto-Submitted")
}
fn parse(s: &str) -> Result<Self, Box<dyn std::error::Error + Send + Sync>> {
Ok(Self(s.into()))
}
fn display(&self) -> HeaderValue {
HeaderValue::new(Self::name(), self.0.clone())
}
}
fn user_agent() -> UserAgent {
String::from("fs-infmath-jobboerse via sendmail").into()
}
#[derive(serde::Serialize)]
pub(crate) struct EmailData {
pub(crate) confirmation_link: SerializableUrl,
@ -19,50 +46,28 @@ pub(crate) async fn send_confirmation_email(
email_config: &EmailConfig,
email_data: &EmailData,
) -> actix_web::Result<(), EmailError> {
// receiver of the confirmation e-mail
let to_mailbox = Mailbox::new(None, contact_address);
let email_body = hb.render(template::EMAIL_PLAIN, &email_data)?;
#[derive(Clone, Debug)]
struct AutoGeneratedHeader(String);
impl Default for AutoGeneratedHeader {
fn default() -> Self {
Self("auto-generated".into())
}
}
impl Header for AutoGeneratedHeader {
fn name() -> HeaderName {
HeaderName::new_from_ascii_str("Auto-Submitted")
}
fn parse(s: &str) -> Result<Self, Box<dyn std::error::Error + Send + Sync>> {
Ok(Self(s.into()))
}
fn display(&self) -> HeaderValue {
HeaderValue::new(Self::name(), self.0.clone())
}
}
let ua_header =
lettre::message::header::UserAgent::from(String::from("fs-infmath-jobboerse via sendmail"));
let message = lettre::Message::builder()
.from(email_config.from.to_owned())
.to(to_mailbox)
.subject(&email_config.subject)
.header(ua_header.clone())
.header(user_agent())
.header(AutoGeneratedHeader::default())
.singlepart(SinglePart::plain(email_body))?;
lettre::AsyncSendmailTransport::new().send(message).await?;
// successfully send a confirmation e-mail now send a notice to our-self
let message = lettre::Message::builder()
.from(email_config.from.to_owned())
.to(email_config.from.to_owned())
.subject(&email_config.subject)
.header(ua_header)
.header(user_agent())
.header(AutoGeneratedHeader::default())
.singlepart(SinglePart::plain(
"Automatischer Hinweis: Eine neue Stellenausschreibung wurde zur Jobbörse eingereicht!"