feat: SMTP Driver Integration (#12993)

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
Co-authored-by: Félix Malfait <felix@twenty.com>
This commit is contained in:
neo773
2025-07-10 18:47:26 +05:30
committed by GitHub
parent fe9de195c3
commit aede38000e
50 changed files with 1358 additions and 484 deletions
@@ -64,14 +64,14 @@ export class ImapClientProvider {
await client.connect();
this.logger.log(
`Connected to IMAP server for ${connectionParameters.handle}`,
`Connected to IMAP server for ${connectedAccount.handle}`,
);
try {
const mailboxes = await client.list();
this.logger.log(
`Available mailboxes for ${connectionParameters.handle}: ${mailboxes.map((m) => m.path).join(', ')}`,
`Available mailboxes for ${connectedAccount.handle}: ${mailboxes.map((m) => m.path).join(', ')}`,
);
} catch (error) {
this.logger.warn(`Failed to list mailboxes: ${error.message}`);
@@ -0,0 +1,9 @@
import { Module } from '@nestjs/common';
import { SmtpClientProvider } from './providers/smtp-client.provider';
@Module({
providers: [SmtpClientProvider],
exports: [SmtpClientProvider],
})
export class MessagingSmtpDriverModule {}
@@ -0,0 +1,35 @@
import { Injectable } from '@nestjs/common';
import { createTransport, Transporter } from 'nodemailer';
import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
@Injectable()
export class SmtpClientProvider {
public async getSmtpClient(
connectedAccount: Pick<
ConnectedAccountWorkspaceEntity,
'connectionParameters' | 'handle'
>,
): Promise<Transporter> {
const smtpParams = connectedAccount.connectionParameters?.SMTP;
if (!smtpParams) {
throw new Error('SMTP settings not configured for this account');
}
const transporter = createTransport({
host: smtpParams.host,
port: smtpParams.port,
auth: {
user: connectedAccount.handle,
pass: smtpParams.password,
},
tls: {
rejectUnauthorized: false,
},
});
return transporter;
}
}