Issue:
[FEATURE] Add support for SMTP email server

### Feature Description

Add support for sending emails with a custom SMTP server. (Currently only AWS SES is supported)

### Possible Implementation

Could be implemented using `lettre` crate.
Steps to implement:
- Create the email building and sending logic
- Impl the EmailClient trait
- Add a new arm to the match statement in `create_email_client()` function

### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!

Resolution:
<think>
PR Context:
- Title: feat(email): Add SMTP support to allow mails through self hosted/custom SMTP server
- Merged: 2024-11-20T14:48:30Z
- Files changed: 11 files
- Commits: 8 commits

Implementation approach:

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [X] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
Add SMTP support to allow mails through self-hosted/custom SMTP server
#5156 

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(email): Add SMTP support to allow mails through self hosted/custom SMTP server (#6617)
Co-autho
Files to modify:


**crates/external_services/src/email.rs**
  Remove:
    - enum: pub::AvailableEmailClients
  Add:
    - enum: pub::EmailClientConfigs
    - mod: pub::smtp
    - mod: pub::no_email

**crates/external_services/src/email/no_email.rs**
  Add:
    - function: pub::create
    - function: private::convert_to_rich_text
    - function: private::send_email
    - struct: pub::NoEmailClient
    - impl: impl NoEmailClient
    - impl: impl EmailClient for NoEmailClient

**crates/external_services/src/email/ses.rs**
  Add:
    - function: pub::validate
    - impl: impl SESConfig

**crates/external_services/src/email/smtp.rs**
  Add:
    - function: pub::create_client
    - function: pub::create
    - function: private::to_mail_box
    - function: pub::validate
    - function: private::convert_to_rich_text
    - function: private::send_email
    - struct: pub::SmtpServer
    - struct: pub::SmtpServerConfig
    - enum: pub::SmtpConnection
    - enum: pub::SmtpError
    - impl: impl SmtpServer
    - impl: impl SmtpServerConfig
    - impl: impl EmailClient for SmtpServer

**crates/router/src/configs/settings.rs**
  Modify existing code

**crates/router/src/routes/app.rs**
  Modify existing code