mirror of
https://github.com/wekan/wekan.git
synced 2026-11-07 11:02:33 -05:00
Email that comes back is handled in WeKan instead of landing in the administrator's own inbox. Admin Panel -> E-mail -> Bounces: hard bounces (a mistyped invited address), soft bounces, automatic replies and spam complaints, each with actions done after a count - list it, stop emailing the address, tell who invited it, delete the invitation, ignore - as listmonk and Discourse do it, and the list of addresses that bounced, which an admin clears to email them again. Amazon SES Bounce and Complaint notifications and mail SES receives arrive through SNS at /api/inbound-email/ses, signature-checked against Amazon's certificate and accepted only from the topics the Admin Panel lists. Delivery status notifications and out-of-office replies arriving by IMAP, a provider webhook or a Sandstorm grain are bounces too, never cards. Admin Panel -> Problems -> Email shows what went wrong sending or receiving: a send the mail server refused or could not reach, an IMAP mailbox that cannot be read (never with its password), an unreadable email, an email for a board that no longer takes email. Attempts stay in Problems -> Security. The inbound email endpoints no longer need the whole REST API turned on. Runtime tests run WeKan's own transports against local SMTP and IMAP servers over TCP, a real Sandstorm Maildir, the webhook over HTTP and signed SNS messages; UI tests drive the Email and Chat views, the email-to-card settings and the Bounces page. They found and this fixes: every whole-message parse failed in the server bundle (nodemailer's addressparser resolved to its ESM build), the Chat view's drag and drop never started (dragscroll took the mouse) and dropped a card into the target's previous list, and the Chat panes did not follow a change to a right-to-left language. Thanks to xet7 ! Fixes #794, Fixes #3948.
18 lines
602 B
JavaScript
18 lines
602 B
JavaScript
// Record an email problem in Admin Panel -> Problems -> Email
|
|
// (models/lib/mailProblems.js). Never throws: recording that a send failed
|
|
// must not turn into a second failure.
|
|
const { mailProblemEvent } = require('/models/lib/mailProblems');
|
|
|
|
function recordMailProblem(kind, info = {}) {
|
|
try {
|
|
const evt = mailProblemEvent(kind, info);
|
|
if (!evt) return;
|
|
const { foldEventFireAndForget } = require('/server/lib/eventLogFold');
|
|
foldEventFireAndForget(evt, 'mailProblems');
|
|
} catch (e) {
|
|
// logging must never break the mail path
|
|
}
|
|
}
|
|
|
|
module.exports = { recordMailProblem };
|