Skip to content

Commit

Permalink
Use SES to send e-mails
Browse files Browse the repository at this point in the history
  • Loading branch information
paweld-iRonin committed Oct 22, 2023
1 parent cc2d10b commit 6241871
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 2 deletions.
50 changes: 50 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
},
"dependencies": {
"@aws-sdk/client-s3": "^3.433.0",
"@aws-sdk/client-ses": "^3.433.0",
"@aws-sdk/s3-request-presigner": "^3.433.0",
"@nestjs/common": "^10.0.0",
"@nestjs/config": "^3.1.1",
Expand Down
9 changes: 8 additions & 1 deletion src/companies/companies.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ import { Pagination } from './../paginate';
import { Company } from './entities/company.entity';
import { FileInterceptor } from '@nestjs/platform-express';
import { AssetsService } from './assets.service';
import { EmailService } from './email.service';

@Controller('companies')
export class CompaniesController {
constructor(private readonly companiesService: CompaniesService,
private readonly fileUploadService: FileUploadService,
private readonly assetsService: AssetsService) {}
private readonly assetsService: AssetsService,
private readonly emailService: EmailService) {}

@Post()
create(@Body() createCompanyDto: CreateCompanyDto) {
Expand Down Expand Up @@ -63,4 +65,9 @@ export class CompaniesController {
findOneAsset(@Param('id') id: string) {
return this.assetsService.findOne(+id);
}

@Get('send_email/:email')
sendEmail(@Param('email') email: string) {
return this.emailService.send(email);
}
}
3 changes: 2 additions & 1 deletion src/companies/companies.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ import { Company } from './entities/company.entity';
import { Asset } from './entities/asset.entity';
import { FileUploadService } from './file.upload.service';
import { AssetsService } from './assets.service';
import { EmailService } from './email.service';

@Module({
imports: [TypeOrmModule.forFeature([Company, Asset])],
controllers: [CompaniesController],
providers: [CompaniesService, FileUploadService, AssetsService],
providers: [CompaniesService, FileUploadService, AssetsService, EmailService],
})
export class CompaniesModule {}
47 changes: 47 additions & 0 deletions src/companies/email.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { Injectable } from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";

@Injectable()
export class EmailService {
constructor(private readonly configService: ConfigService) {}

async send(email: string) {
const client = new SESClient({
region: this.configService.getOrThrow('AWS_REGION'),
credentials: {
accessKeyId: this.configService.getOrThrow('AWS_ACCESS_KEY_ID'),
secretAccessKey: this.configService.getOrThrow('AWS_SECRET_KEY_ID'),
},
});

const input = {
"Destination": {
"BccAddresses": [],
"CcAddresses": [],
"ToAddresses": [email]
},
"Message": {
"Body": {
"Html": {
"Charset": "UTF-8",
"Data": "This message body contains HTML formatting. It can, for example, contain links like this one: <a class=\"ulink\" href=\"http://docs.aws.amazon.com/ses/latest/DeveloperGuide\" target=\"_blank\">Amazon SES Developer Guide</a>."
},
"Text": {
"Charset": "UTF-8",
"Data": "This is the message body in text format."
}
},
"Subject": {
"Charset": "UTF-8",
"Data": "Test email"
}
},
"ReplyToAddresses": ["[email protected]"],
"Source": "[email protected]",
};

const command = new SendEmailCommand(input);
return await client.send(command);
}
}

0 comments on commit 6241871

Please sign in to comment.