send email refacto (#10691)
working refacto with min module deps of messaging-import-manager-module
This commit is contained in:
@ -1,17 +1,12 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
import { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory';
|
||||
import { OAuth2ClientManagerModule } from 'src/modules/connected-account/oauth2-client-manager/oauth2-client-manager.module';
|
||||
import { GmailClientProvider } from 'src/modules/messaging/message-import-manager/drivers/gmail/providers/gmail-client.provider';
|
||||
import { MessagingImportManagerModule } from 'src/modules/messaging/message-import-manager/messaging-import-manager.module';
|
||||
import { SendEmailWorkflowAction } from 'src/modules/workflow/workflow-executor/workflow-actions/mail-sender/send-email.workflow-action';
|
||||
|
||||
@Module({
|
||||
imports: [OAuth2ClientManagerModule],
|
||||
providers: [
|
||||
GmailClientProvider,
|
||||
ScopedWorkspaceContextFactory,
|
||||
SendEmailWorkflowAction,
|
||||
],
|
||||
imports: [MessagingImportManagerModule],
|
||||
providers: [ScopedWorkspaceContextFactory, SendEmailWorkflowAction],
|
||||
exports: [SendEmailWorkflowAction],
|
||||
})
|
||||
export class SendEmailActionModule {}
|
||||
|
||||
@ -10,7 +10,7 @@ import { WorkflowExecutor } from 'src/modules/workflow/workflow-executor/interfa
|
||||
import { ScopedWorkspaceContextFactory } from 'src/engine/twenty-orm/factories/scoped-workspace-context.factory';
|
||||
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
|
||||
import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
|
||||
import { GmailClientProvider } from 'src/modules/messaging/message-import-manager/drivers/gmail/providers/gmail-client.provider';
|
||||
import { MessagingSendMessageService } from 'src/modules/messaging/message-import-manager/services/messaging-send-message.service';
|
||||
import {
|
||||
WorkflowStepExecutorException,
|
||||
WorkflowStepExecutorExceptionCode,
|
||||
@ -33,12 +33,12 @@ export type WorkflowSendEmailStepOutputSchema = {
|
||||
export class SendEmailWorkflowAction implements WorkflowExecutor {
|
||||
private readonly logger = new Logger(SendEmailWorkflowAction.name);
|
||||
constructor(
|
||||
private readonly gmailClientProvider: GmailClientProvider,
|
||||
private readonly scopedWorkspaceContextFactory: ScopedWorkspaceContextFactory,
|
||||
private readonly twentyORMGlobalManager: TwentyORMGlobalManager,
|
||||
private readonly sendMessageService: MessagingSendMessageService,
|
||||
) {}
|
||||
|
||||
private async getEmailClient(connectedAccountId: string) {
|
||||
private async getConnectedAccount(connectedAccountId: string) {
|
||||
if (!isValidUuid(connectedAccountId)) {
|
||||
throw new SendEmailActionException(
|
||||
`Connected Account ID is not a valid UUID`,
|
||||
@ -71,15 +71,7 @@ export class SendEmailWorkflowAction implements WorkflowExecutor {
|
||||
);
|
||||
}
|
||||
|
||||
switch (connectedAccount.provider) {
|
||||
case 'google':
|
||||
return await this.gmailClientProvider.getGmailClient(connectedAccount);
|
||||
default:
|
||||
throw new SendEmailActionException(
|
||||
`Provider ${connectedAccount.provider} is not supported`,
|
||||
SendEmailActionExceptionCode.PROVIDER_NOT_SUPPORTED,
|
||||
);
|
||||
}
|
||||
return connectedAccount;
|
||||
}
|
||||
|
||||
async execute({
|
||||
@ -96,7 +88,7 @@ export class SendEmailWorkflowAction implements WorkflowExecutor {
|
||||
);
|
||||
}
|
||||
|
||||
const emailProvider = await this.getEmailClient(
|
||||
const connectedAccount = await this.getConnectedAccount(
|
||||
step.settings.input.connectedAccountId,
|
||||
);
|
||||
|
||||
@ -123,23 +115,14 @@ export class SendEmailWorkflowAction implements WorkflowExecutor {
|
||||
const safeBody = purify.sanitize(body || '');
|
||||
const safeSubject = purify.sanitize(subject || '');
|
||||
|
||||
const message = [
|
||||
`To: ${email}`,
|
||||
`Subject: ${safeSubject || ''}`,
|
||||
'MIME-Version: 1.0',
|
||||
'Content-Type: text/plain; charset="UTF-8"',
|
||||
'',
|
||||
safeBody,
|
||||
].join('\n');
|
||||
|
||||
const encodedMessage = Buffer.from(message).toString('base64');
|
||||
|
||||
await emailProvider.users.messages.send({
|
||||
userId: 'me',
|
||||
requestBody: {
|
||||
raw: encodedMessage,
|
||||
await this.sendMessageService.sendMessage(
|
||||
{
|
||||
to: email,
|
||||
subject: safeSubject,
|
||||
body: safeBody,
|
||||
},
|
||||
});
|
||||
connectedAccount,
|
||||
);
|
||||
|
||||
this.logger.log(`Email sent successfully`);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user