send email for outlook (#10703)

driver implementation for sending emails with microsoft

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
This commit is contained in:
Guillim
2025-03-07 10:12:49 +01:00
committed by GitHub
parent 53c561e3eb
commit 21c7d2081d
3 changed files with 39 additions and 8 deletions

View File

@ -1,9 +1,11 @@
import { Injectable } from '@nestjs/common';
import { assertUnreachable, ConnectedAccountProvider } from 'twenty-shared';
import { z } from 'zod';
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';
interface SendMessageInput {
body: string;
@ -13,7 +15,10 @@ interface SendMessageInput {
@Injectable()
export class MessagingSendMessageService {
constructor(private readonly gmailClientProvider: GmailClientProvider) {}
constructor(
private readonly gmailClientProvider: GmailClientProvider,
private readonly microsoftClientProvider: MicrosoftClientProvider,
) {}
public async sendMessage(
sendMessageInput: SendMessageInput,
@ -43,9 +48,30 @@ export class MessagingSendMessageService {
});
break;
}
case ConnectedAccountProvider.MICROSOFT:
// TODO: Implement Microsoft provider
throw new Error('Microsoft provider not implemented');
case ConnectedAccountProvider.MICROSOFT: {
const microsoftClient =
await this.microsoftClientProvider.getMicrosoftClient(
connectedAccount,
);
const message = {
subject: sendMessageInput.subject,
body: {
contentType: 'Text',
content: sendMessageInput.body,
},
toRecipients: [{ emailAddress: { address: sendMessageInput.to } }],
};
const response = await microsoftClient
.api(`/me/messages`)
.post(message);
z.string().parse(response.id);
await microsoftClient.api(`/me/messages/${response.id}/send`).post({});
break;
}
default:
assertUnreachable(
connectedAccount.provider,