diff --git a/gradesa/src/backend/mailService.js b/gradesa/src/backend/mailService.js
index 19b04c6..5d32eed 100644
--- a/gradesa/src/backend/mailService.js
+++ b/gradesa/src/backend/mailService.js
@@ -4,11 +4,28 @@ const isCI = process.env.CI === "true";
const settings = {
hideToska: false,
- disableToska: true,
+ // Keep disabled only when explicitly requested via env.
+ disableToska: process.env.PATE_DISABLE_TOSKA === "true",
color: "orange",
header: "GRADESA",
headerFontColor: "white",
- dryrun: false,
+ dryrun: process.env.PATE_DRYRUN === "true",
+};
+
+const looksLikeProviderFailure = (payload) => {
+ if (!payload || typeof payload !== "object") {
+ return false;
+ }
+
+ if (payload.ok === false || payload.success === false) {
+ return true;
+ }
+
+ if (payload.error || payload.errors || payload.messageType === "error") {
+ return true;
+ }
+
+ return false;
};
const sendEmail = async ({ to, subject, text }) => {
@@ -55,10 +72,30 @@ const sendEmail = async ({ to, subject, text }) => {
}
);
+ const responseText = await response.text();
+
if (!response.ok) {
- const errorBody = await response.text();
throw new Error(
- `PATE email sending failed with status ${response.status}: ${errorBody}`
+ `PATE email sending failed with status ${response.status}: ${responseText}`
+ );
+ }
+
+ let payload;
+ try {
+ payload = responseText ? JSON.parse(responseText) : null;
+ } catch {
+ payload = null;
+ }
+
+ if (looksLikeProviderFailure(payload)) {
+ throw new Error(
+ `PATE reported email failure: ${payload.message || responseText}`
+ );
+ }
+
+ if (settings.dryrun) {
+ throw new Error(
+ "Email sending is configured as dry-run (PATE_DRYRUN=true)."
);
}
} catch (error) {
diff --git a/gradesa/src/components/ui/sidebar/sidebar.js b/gradesa/src/components/ui/sidebar/sidebar.js
index 095e584..ef3f290 100644
--- a/gradesa/src/components/ui/sidebar/sidebar.js
+++ b/gradesa/src/components/ui/sidebar/sidebar.js
@@ -116,7 +116,7 @@ function StudentSideBar() {
Glossar
- Kontaktieren Sie unser Team
+ Brauchen Sie Hilfe?