mirror of
https://github.com/plankanban/planka.git
synced 2025-12-18 09:13:21 +03:00
118 lines
3.4 KiB
JavaScript
118 lines
3.4 KiB
JavaScript
/*!
|
|
* Copyright (c) 2024 PLANKA Software GmbH
|
|
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
|
*/
|
|
|
|
/**
|
|
* @swagger
|
|
* /config/test-smtp:
|
|
* post:
|
|
* summary: Test SMTP configuration
|
|
* description: Sends a test email to verify the SMTP is configured correctly. Only available when SMTP is configured via the UI.
|
|
* tags:
|
|
* - Config
|
|
* operationId: testSmtpConfig
|
|
* responses:
|
|
* 200:
|
|
* description: Test email sent successfully
|
|
* content:
|
|
* application/json:
|
|
* schema:
|
|
* type: object
|
|
* required:
|
|
* - item
|
|
* properties:
|
|
* item:
|
|
* $ref: '#/components/schemas/Config'
|
|
* 401:
|
|
* $ref: '#/components/responses/Unauthorized'
|
|
* 403:
|
|
* $ref: '#/components/responses/Forbidden'
|
|
*/
|
|
|
|
const Errors = {
|
|
NOT_AVAILABLE: {
|
|
notAvailable: 'Not available',
|
|
},
|
|
};
|
|
|
|
module.exports = {
|
|
exits: {
|
|
notAvailable: {
|
|
responseType: 'forbidden',
|
|
},
|
|
},
|
|
|
|
async fn() {
|
|
const { currentUser } = this.req;
|
|
|
|
if (sails.config.custom.smtpHost) {
|
|
return Errors.NOT_AVAILABLE;
|
|
}
|
|
|
|
const { transporter, config } = await sails.helpers.utils.makeSmtpTransporter({
|
|
connectionTimeout: 5000,
|
|
greetingTimeout: 5000,
|
|
socketTimeout: 10000,
|
|
dnsTimeout: 3000,
|
|
});
|
|
|
|
if (!transporter) {
|
|
return Errors.NOT_AVAILABLE;
|
|
}
|
|
|
|
const logs = [];
|
|
try {
|
|
logs.push('📧 Sending test email...');
|
|
/* eslint-disable no-underscore-dangle */
|
|
const info = await transporter.sendMail({
|
|
to: currentUser.email,
|
|
subject: this.req.i18n.__('Test Title'),
|
|
text: this.req.i18n.__('This is a test text message!'),
|
|
html: this.req.i18n.__('This is a <i>test</i> <b>html</b> <code>message</code>!'),
|
|
});
|
|
/* eslint-enable no-underscore-dangle */
|
|
logs.push('✅ Email sent successfully!', '');
|
|
|
|
logs.push(`📬 Message ID: ${info.messageId}`);
|
|
if (info.response) {
|
|
logs.push(`📤 Server response: ${info.response.trim()}`);
|
|
}
|
|
|
|
logs.push('', '🎉 Your configuration is working correctly!');
|
|
} catch (error) {
|
|
logs.push('❌ Failed to send email!', '');
|
|
|
|
if (error.code) {
|
|
logs.push(`⚠️ Error code: ${error.code}`);
|
|
}
|
|
logs.push(`💬 Reason: ${error.message.trim()}`);
|
|
|
|
if (error.code === 'EDNS') {
|
|
logs.push('', '💡 Hint: Check your host setting.');
|
|
} else if (error.code === 'ETIMEDOUT') {
|
|
logs.push('', '💡 Hint: Check your host and port settings.');
|
|
} else if (error.code === 'EAUTH') {
|
|
logs.push('', '💡 Hint: Check your username and password.');
|
|
} else if (error.code === 'ESOCKET') {
|
|
if (error.message.includes('ECONNREFUSED') || error.message.includes('ETIMEDOUT')) {
|
|
logs.push('', '💡 Hint: Check your host and port settings.');
|
|
} else if (error.message.includes('wrong version number')) {
|
|
logs.push('', '💡 Hint: Try toggling "Use secure connection".');
|
|
} else if (error.message.includes('certificate')) {
|
|
logs.push('', '💡 Hint: Try toggling "Reject unauthorized TLS certificates".');
|
|
}
|
|
}
|
|
} finally {
|
|
transporter.close();
|
|
}
|
|
|
|
return {
|
|
item: sails.helpers.config.presentOne(config),
|
|
included: {
|
|
logs,
|
|
},
|
|
};
|
|
},
|
|
};
|