Skip to content

Commit 90bfd4b

Browse files
committed
backend: add more logging around sending emails.
This should help finding the problem from #196
1 parent 316f949 commit 90bfd4b

File tree

5 files changed

+89
-24
lines changed

5 files changed

+89
-24
lines changed

backend/src/monitoring.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,27 @@ pub fn start_monitoring(state: web::Data<AppState>) {
6060
}
6161

6262
std::thread::spawn(move || loop {
63-
if let Ok(conn) = get_connection(&state) {
64-
let (num_users, num_chargers) = match get_numbers(conn) {
65-
Ok(v) => v,
66-
Err(_err) => {
67-
continue;
63+
match get_connection(&state) {
64+
Ok(conn) => {
65+
let (num_users, num_chargers) = match get_numbers(conn) {
66+
Ok(v) => v,
67+
Err(err) => {
68+
log::error!("Failed to get monitoring statistics from database: {}", err);
69+
std::thread::sleep(Duration::from_secs(60 * 60 * 24));
70+
continue;
71+
}
72+
};
73+
match send_mail(&state, num_users, num_chargers) {
74+
Ok(()) => {
75+
log::info!("Monitoring email sent successfully. Users: {}, Chargers: {}", num_users, num_chargers);
76+
}
77+
Err(err) => {
78+
log::error!("Failed to send monitoring mail: {}", err);
79+
}
6880
}
69-
};
70-
match send_mail(&state, num_users, num_chargers) {
71-
Ok(()) => (),
72-
Err(err) => log::error!("Failed to send monitoring mail: {}", err),
81+
}
82+
Err(e) => {
83+
log::error!("Failed to get database connection for monitoring: {:?}", e);
7384
}
7485
}
7586

backend/src/routes/auth/register.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ fn send_verification_mail(
9999
};
100100
match template.render() {
101101
Ok(body) => (body, "Email verifizieren"),
102-
Err(_err) => return Err(Error::InternalError.into()),
102+
Err(e) => {
103+
log::error!("Failed to render German verification email template for user '{}': {}", name, e);
104+
return Err(Error::InternalError.into());
105+
}
103106
}
104107
}
105108
_ => {
@@ -109,7 +112,10 @@ fn send_verification_mail(
109112
};
110113
match template.render() {
111114
Ok(body) => (body, "Verify email"),
112-
Err(_err) => return Err(Error::InternalError.into()),
115+
Err(e) => {
116+
log::error!("Failed to render English verification email template for user '{}': {}", name, e);
117+
return Err(Error::InternalError.into());
118+
}
113119
}
114120
}
115121
};
@@ -219,14 +225,21 @@ pub async fn register(
219225
// maybe add mechanism to automatically retry?
220226
#[cfg(not(test))]
221227
std::thread::spawn(move || {
222-
send_verification_mail(
223-
user_insert.name,
228+
log::info!("Sending verification email to '{}' for user '{}'", data.email, user_insert.name);
229+
match send_verification_mail(
230+
user_insert.name.clone(),
224231
verify,
225232
data.email.clone(),
226233
state.clone(),
227234
lang.into(),
228-
)
229-
.ok();
235+
) {
236+
Ok(()) => {
237+
log::info!("Verification email sent successfully to '{}'", data.email);
238+
}
239+
Err(e) => {
240+
log::error!("Failed to send verification email to '{}' for user '{}': {:?}", data.email, user_insert.name, e);
241+
}
242+
}
230243
});
231244

232245
user_insert_result

backend/src/routes/auth/start_recovery.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ fn send_email(
5353
};
5454
match template.render() {
5555
Ok(b) => (b, "Passwort Wiederherstellung"),
56-
Err(_err) => return Err(Error::InternalError.into()),
56+
Err(e) => {
57+
log::error!("Failed to render German password recovery email template for user '{}': {}", name, e);
58+
return Err(Error::InternalError.into());
59+
}
5760
}
5861
}
5962
_ => {
@@ -63,7 +66,10 @@ fn send_email(
6366
};
6467
match template.render() {
6568
Ok(b) => (b, "Password Recovery"),
66-
Err(_err) => return Err(Error::InternalError.into()),
69+
Err(e) => {
70+
log::error!("Failed to render English password recovery email template for user '{}': {}", name, e);
71+
return Err(Error::InternalError.into());
72+
}
6773
}
6874
}
6975
};
@@ -132,7 +138,15 @@ pub async fn start_recovery(
132138
user.email
133139
};
134140

135-
send_email(user.name, token_id, email, state.clone(), lang.into()).ok();
141+
log::info!("Sending password recovery email to '{}' for user '{}'", email, user.name);
142+
match send_email(user.name.clone(), token_id, email.clone(), state.clone(), lang.into()) {
143+
Ok(()) => {
144+
log::info!("Password recovery email sent successfully to '{}' for user '{}'", email, user.name);
145+
}
146+
Err(e) => {
147+
log::error!("Failed to send password recovery email to '{}' for user '{}': {:?}", email, user.name, e);
148+
}
149+
}
136150
});
137151

138152
Ok(HttpResponse::Ok())

backend/src/routes/user/update_user.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,30 @@ fn send_email_change_notification(
6161
name: name.to_string(),
6262
sender_email: state.sender_email.clone(),
6363
};
64-
(template.render().unwrap(), "E-Mail-Adresse geändert")
64+
match template.render() {
65+
Ok(body) => (body, "E-Mail-Adresse geändert"),
66+
Err(e) => {
67+
log::error!("Failed to render German email change notification template for user '{}': {}", name, e);
68+
return;
69+
}
70+
}
6571
}
6672
_ => {
6773
let template = EmailChangeNotificationEn {
6874
name: name.to_string(),
6975
sender_email: state.sender_email.clone(),
7076
};
71-
(template.render().unwrap(), "Email address changed")
77+
match template.render() {
78+
Ok(body) => (body, "Email address changed"),
79+
Err(e) => {
80+
log::error!("Failed to render English email change notification template for user '{}': {}", name, e);
81+
return;
82+
}
83+
}
7284
}
7385
};
86+
87+
log::info!("Sending email change notification to '{}' for user '{}'", old_email, name);
7488
send_email(&old_email, subject, body, &state);
7589
});
7690
}
@@ -93,7 +107,13 @@ fn send_verification_mail(
93107
state.frontend_url, verification_id
94108
),
95109
};
96-
(template.render().unwrap(), "E-Mail-Adresse bestätigen")
110+
match template.render() {
111+
Ok(body) => (body, "E-Mail-Adresse bestätigen"),
112+
Err(e) => {
113+
log::error!("Failed to render German verification email template for user '{}': {}", name, e);
114+
return;
115+
}
116+
}
97117
}
98118
_ => {
99119
let template = crate::routes::auth::register::VerifyEmailENTemplate {
@@ -103,10 +123,17 @@ fn send_verification_mail(
103123
state.frontend_url, verification_id
104124
),
105125
};
106-
(template.render().unwrap(), "Verify email address")
126+
match template.render() {
127+
Ok(body) => (body, "Verify email address"),
128+
Err(e) => {
129+
log::error!("Failed to render English verification email template for user '{}': {}", name, e);
130+
return;
131+
}
132+
}
107133
}
108134
};
109135

136+
log::info!("Sending verification email to '{}' for user '{}'", email, name);
110137
send_email(&email, subject, body, &state);
111138
});
112139
}

backend/src/utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ pub fn send_email(email: &str, subject: &str, body: String, state: &web::Data<Ap
178178
.unwrap();
179179

180180
match mailer.send(&email) {
181-
Ok(_) => println!("Email sent successfully!"),
182-
Err(e) => panic!("Could not send email: {e:?}"),
181+
Ok(_) => log::info!("Email sent successfully!"),
182+
Err(e) => log::error!("Could not send email: {e:?}"),
183183
}
184184
} else {
185185
log::error!("No mailer configured, email not sent");

0 commit comments

Comments
 (0)