From 0469aba90b3d3e368f0c20fb2f050a310146563c Mon Sep 17 00:00:00 2001 From: martmull Date: Thu, 17 Apr 2025 11:34:55 +0200 Subject: [PATCH] Improve from in send email action (#11581) ## Before image ## After image --- .../gmail/messaging-gmail-driver.module.ts | 3 ++ .../gmail/providers/oauth2-client.provider.ts | 28 +++++++++++++++++++ .../messaging-send-message.service.ts | 12 ++++++++ 3 files changed, 43 insertions(+) create mode 100644 packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/providers/oauth2-client.provider.ts diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts index f54c4c2e6..4b12764e4 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/messaging-gmail-driver.module.ts @@ -18,6 +18,7 @@ import { GmailGetMessageListService } from 'src/modules/messaging/message-import import { GmailGetMessagesService } from 'src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-get-messages.service'; import { GmailHandleErrorService } from 'src/modules/messaging/message-import-manager/drivers/gmail/services/gmail-handle-error.service'; import { MessageParticipantManagerModule } from 'src/modules/messaging/message-participant-manager/message-participant-manager.module'; +import { OAuth2ClientProvider } from 'src/modules/messaging/message-import-manager/drivers/gmail/providers/oauth2-client.provider'; @Module({ imports: [ @@ -36,6 +37,7 @@ import { MessageParticipantManagerModule } from 'src/modules/messaging/message-p ], providers: [ GmailClientProvider, + OAuth2ClientProvider, GmailGetHistoryService, GmailFetchByBatchService, GmailGetMessagesService, @@ -46,6 +48,7 @@ import { MessageParticipantManagerModule } from 'src/modules/messaging/message-p GmailGetMessagesService, GmailGetMessageListService, GmailClientProvider, + OAuth2ClientProvider, ], }) export class MessagingGmailDriverModule {} diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/providers/oauth2-client.provider.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/providers/oauth2-client.provider.ts new file mode 100644 index 000000000..6559c0de9 --- /dev/null +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/drivers/gmail/providers/oauth2-client.provider.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@nestjs/common'; + +import { oauth2_v2, google } from 'googleapis'; + +import { OAuth2ClientManagerService } from 'src/modules/connected-account/oauth2-client-manager/services/oauth2-client-manager.service'; +import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; + +@Injectable() +export class OAuth2ClientProvider { + constructor( + private readonly oAuth2ClientManagerService: OAuth2ClientManagerService, + ) {} + + public async getOAuth2Client( + connectedAccount: Pick< + ConnectedAccountWorkspaceEntity, + 'provider' | 'refreshToken' + >, + ): Promise { + const oAuth2Client = + await this.oAuth2ClientManagerService.getOAuth2Client(connectedAccount); + + return google.oauth2({ + version: 'v2', + auth: oAuth2Client, + }); + } +} diff --git a/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-send-message.service.ts b/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-send-message.service.ts index 283ffdeee..33414aa51 100644 --- a/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-send-message.service.ts +++ b/packages/twenty-server/src/modules/messaging/message-import-manager/services/messaging-send-message.service.ts @@ -7,6 +7,7 @@ import { ConnectedAccountProvider } from 'twenty-shared/types'; 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 { MicrosoftClientProvider } from 'src/modules/messaging/message-import-manager/drivers/microsoft/providers/microsoft-client.provider'; +import { OAuth2ClientProvider } from 'src/modules/messaging/message-import-manager/drivers/gmail/providers/oauth2-client.provider'; interface SendMessageInput { body: string; @@ -18,6 +19,7 @@ interface SendMessageInput { export class MessagingSendMessageService { constructor( private readonly gmailClientProvider: GmailClientProvider, + private readonly oAuth2ClientProvider: OAuth2ClientProvider, private readonly microsoftClientProvider: MicrosoftClientProvider, ) {} @@ -30,7 +32,17 @@ export class MessagingSendMessageService { const gmailClient = await this.gmailClientProvider.getGmailClient(connectedAccount); + const oAuth2Client = + await this.oAuth2ClientProvider.getOAuth2Client(connectedAccount); + + const { data } = await oAuth2Client.userinfo.get(); + + const fromEmail = data.email; + + const fromName = data.name; + const message = [ + `From: "${fromName}" <${fromEmail}>`, `To: ${sendMessageInput.to}`, `Subject: ${sendMessageInput.subject}`, 'MIME-Version: 1.0',