Files
booklore/booklore-api
Juror2372 6576f3351a Update EmailService.java
# Enhanced Email Service: SSL Support and Extended Timeouts

## Problem Statement

The current `EmailService` has two significant limitations:

1. **Hardcoded short timeouts (15 seconds)** that cause failures with slow SMTP servers, particularly cPanel and shared hosting providers
2. **Missing SSL support** for port 465 connections - only STARTTLS is supported

This results in timeout errors when using SMTP servers that require longer response times or SSL connections.

## Changes Made

### 1. Extended Timeouts
- **Increased default timeouts from 15 seconds to 60 seconds**
- Added configurable timeouts via system properties
- Added write timeout configuration (previously missing)

**Before:**
```java
mailProps.put("mail.smtp.connectiontimeout", 15000);  // 15 seconds
mailProps.put("mail.smtp.timeout", 15000);            // 15 seconds
```

**After:**
```java
mailProps.put("mail.smtp.connectiontimeout", 60000);  // 60 seconds
mailProps.put("mail.smtp.timeout", 60000);            // 60 seconds  
mailProps.put("mail.smtp.writetimeout", 60000);       // 60 seconds (new)
```

### 2. Full SSL Support
- **Added SSL configuration for port 465**
- **Auto-detection based on port and `ssl_enable` field**
- **Enhanced security with modern TLS protocols**

**New SSL Configuration:**
```java
mailProps.put("mail.transport.protocol", "smtps");
mailProps.put("mail.smtp.ssl.enable", "true");
mailProps.put("mail.smtp.ssl.trust", emailProvider.getHost());
mailProps.put("mail.smtp.ssl.protocols", "TLSv1.2,TLSv1.3");
```

### 3. Improved Connection Type Detection
- **Automatic detection** of SSL, STARTTLS, or plain connections
- **Support for `ssl_enable` database field**
- **Port-based auto-configuration** (465=SSL, 587=STARTTLS)

### 4. Enhanced Debugging and Logging
- **Configurable debug mode** via system properties
- **Detailed connection type logging**
- **Better error context** for troubleshooting

## Database Schema Compatibility

This enhancement works with the existing database schema and is **fully backward compatible**. It also supports the enhanced schema with `ssl_enable` and `connection_type` fields:

```sql
ALTER TABLE email_provider 
ADD COLUMN ssl_enable BOOLEAN NOT NULL DEFAULT FALSE,
ADD COLUMN connection_type VARCHAR(20) NOT NULL DEFAULT 'STARTTLS';
```

## Configuration Examples

### SSL (Port 465)
```
Host: smtp.gmail.com
Port: 465
ssl_enable: true
start_tls: false
```

### STARTTLS (Port 587) 
```
Host: smtp.gmail.com
Port: 587
ssl_enable: false
start_tls: true
```

### Auto-Detection
- **Port 465** → Automatically configured as SSL
- **Port 587 + start_tls=true** → Automatically configured as STARTTLS
- **ssl_enable=true** → Forces SSL regardless of port

## System Property Overrides

Timeouts can be customized via system properties:
```bash
-Dmail.smtp.connectiontimeout=30000
-Dmail.smtp.timeout=30000  
-Dmail.smtp.writetimeout=30000
-Dmail.debug=true
```

## Benefits

1. **Broader SMTP Server Compatibility** - Works with cPanel, Exchange, and slow SMTP servers
2. **Enhanced Security** - Full SSL support with modern TLS protocols
3. **Better Reliability** - Extended timeouts prevent premature failures
4. **Improved Debugging** - Better logging and configurable debug mode
5. **Backward Compatibility** - No breaking changes to existing configurations

## Testing

This enhancement has been tested with:
-  cPanel SMTP servers (both SSL and STARTTLS)
-  Gmail SMTP (ports 465 and 587)
-  Corporate Exchange servers
-  Various shared hosting providers

## Impact

- **Fixes timeout issues** with slow SMTP servers
- **Enables SSL email providers** that were previously unsupported  
- **Maintains full backward compatibility**
- **No database migration required** (but supports enhanced schema)

---

**This fix resolves timeout issues reported by users with cPanel and other slow SMTP providers while adding comprehensive SSL support for enhanced security.**
2025-07-13 00:39:51 -06:00
..
2025-07-13 00:39:51 -06:00
2024-12-13 12:58:23 -07:00
2024-12-13 12:58:23 -07:00
2024-12-13 12:58:23 -07:00
2024-12-13 12:58:23 -07:00