2025-06-09 22:50:06 +02:00
|
|
|
# Email System Fixes
|
|
|
|
|
|
|
|
|
|
## Issues Addressed
|
|
|
|
|
|
|
|
|
|
### 1. Email Credentials Not Found Errors
|
|
|
|
|
- **Problem**: The system was trying to fetch emails even when no credentials were present
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Added session ID check in `EmailThreadView` before attempting to fetch emails
|
|
|
|
|
- Modified `fetch-thread` API to return empty results instead of throwing errors when credentials are missing
|
|
|
|
|
- Added proper session cleanup in `EmailCommunication` component
|
|
|
|
|
|
|
|
|
|
### 2. 502 Gateway Timeout Errors
|
|
|
|
|
- **Problem**: Email fetching was causing timeouts, especially when editing/saving interest cards
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Reduced email fetch limit from 50 to 20 emails
|
|
|
|
|
- Added 15-second timeout for IMAP connections
|
|
|
|
|
- Prevented unnecessary email fetches when no session exists
|
|
|
|
|
|
|
|
|
|
### 3. EOI Generation Issues
|
2025-06-09 22:56:10 +02:00
|
|
|
- **Problem**: EOI generation was failing due to missing Address field and configuration issues
|
2025-06-09 22:50:06 +02:00
|
|
|
- **Solution**:
|
2025-06-09 22:56:10 +02:00
|
|
|
- Made Address field optional with default value "Not Provided"
|
2025-06-09 22:50:06 +02:00
|
|
|
- Added environment variable validation for `NUXT_DOCUMENSO_API_KEY` and `NUXT_DOCUMENSO_BASE_URL`
|
2025-06-09 22:56:10 +02:00
|
|
|
- Improved error messages to indicate when configuration is missing or fields need to be filled
|
|
|
|
|
- Required fields are now: Full Name, Email Address, Yacht Name, Length, Width, Depth
|
|
|
|
|
|
|
|
|
|
### 4. Interest Save Failures
|
|
|
|
|
- **Problem**: Interest updates were failing with authentication errors
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Updated `update-interest.ts` API to accept both x-tag headers ("094ut234" and "pjnvü1230")
|
|
|
|
|
- Now both authenticated and unauthenticated users can save interest updates
|
2025-06-09 22:50:06 +02:00
|
|
|
|
2025-06-09 23:09:32 +02:00
|
|
|
### 5. Email Signature Formatting
|
|
|
|
|
- **Problem**: Logo was appearing below the signature details
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Moved Port Nimara logo to the top of the signature
|
|
|
|
|
- Logo now appears above the name with proper spacing
|
|
|
|
|
|
|
|
|
|
### 6. Email Refresh Not Showing New Emails
|
|
|
|
|
- **Problem**: New emails from clients weren't appearing after refresh
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Enhanced IMAP search to include CC and BCC fields
|
|
|
|
|
- Now searches in multiple folders: INBOX, Sent, Sent Items, Sent Mail
|
|
|
|
|
- Better email detection for comprehensive thread retrieval
|
|
|
|
|
|
|
|
|
|
### 7. EOI Document Generation Issues
|
|
|
|
|
- **Problem**: EOI documents were created but stuck in draft status with non-working links
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Fixed response structure to match actual Documenso API response
|
|
|
|
|
- Added proper document send step to move from draft to active
|
|
|
|
|
- Changed `sendEmail` to `true` to ensure recipients receive signing emails
|
|
|
|
|
- Correctly extract signing URLs from the response
|
|
|
|
|
|
2025-06-09 23:29:24 +02:00
|
|
|
### 8. 502 Bad Gateway on Container Restart
|
|
|
|
|
- **Problem**: Getting 502 errors when refreshing after container restart
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Added better session validation in `fetch-thread` API
|
|
|
|
|
- Added try-catch for decryption failures (session invalid after restart)
|
|
|
|
|
- Client-side now detects 502 errors and clears invalid sessions
|
|
|
|
|
- No error toast shown - just resets to empty email state
|
|
|
|
|
|
2025-06-09 23:33:20 +02:00
|
|
|
### 9. All Interest and Berth APIs Authentication Fixed
|
|
|
|
|
- **Problem**: APIs were only accepting one auth header, causing failures for unauthenticated users
|
|
|
|
|
- **Solution**: Updated ALL APIs to accept both headers ("094ut234" and "pjnvü1230"):
|
|
|
|
|
- `create-interest.ts` - Create new interests
|
|
|
|
|
- `update-interest.ts` - Update existing interests
|
|
|
|
|
- `delete-interest.ts` - Delete interests
|
|
|
|
|
- `get-interests.ts` - List all interests
|
|
|
|
|
- `get-interest-by-id.ts` - Get single interest
|
|
|
|
|
- `get-berths.ts` - Get all berths
|
|
|
|
|
- `get-interest-berths.ts` - Get berths linked to interest
|
|
|
|
|
- `link-berths-to-interest.ts` - Link berths to interest
|
|
|
|
|
- `unlink-berths-from-interest.ts` - Unlink berths from interest
|
|
|
|
|
- `link-berth-recommendations-to-interest.ts` - Link berth recommendations
|
|
|
|
|
- `unlink-berth-recommendations-from-interest.ts` - Unlink berth recommendations
|
|
|
|
|
- Added comprehensive logging to all APIs for better debugging
|
|
|
|
|
|
|
|
|
|
### 10. EOI Status Dropdown Updated
|
|
|
|
|
- **Problem**: Missing "Waiting for Signatures" status option
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Added "Waiting for Signatures" as option 2 in EOI Status
|
|
|
|
|
- New order: "Awaiting Further Details" → "Waiting for Signatures" → "Signed"
|
|
|
|
|
|
2025-06-10 00:04:24 +02:00
|
|
|
### 11. 404 Errors for Existing Records During Updates - FIXED
|
2025-06-09 23:42:31 +02:00
|
|
|
- **Problem**: Records that exist in the database return 404 when trying to update them
|
2025-06-10 00:15:36 +02:00
|
|
|
- **Root Cause**: Webhook objects were being sent in the request body
|
|
|
|
|
- **Solution**: Now filtering out all object fields, only sending primitives
|
|
|
|
|
|
|
|
|
|
**What we've fixed:**
|
|
|
|
|
- Now skipping all object fields (including webhook fields) during updates
|
|
|
|
|
- Only sending primitive values (strings, numbers, nulls) to the API
|
|
|
|
|
- Removed webhook fields from the allowed fields list
|
|
|
|
|
- Added retry mechanism with exponential backoff
|
|
|
|
|
- Including `Id` field in request body to identify the record
|
|
|
|
|
|
|
|
|
|
**Confirmed Working Format:**
|
|
|
|
|
```javascript
|
|
|
|
|
// URL: /api/v2/tables/mbs9hjauug4eseo/records (no ID in URL)
|
|
|
|
|
// Body: { Id: 459, "Full Name": "...", "Extra Comments": "..." }
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**Test Results:**
|
|
|
|
|
- ✅ PATCH with single object: `{ Id: 459, ... }` - **WORKS**
|
|
|
|
|
- ✅ PATCH with array: `[{ Id: 459, ... }]` - **WORKS**
|
|
|
|
|
- ❌ PATCH with ID in URL: `/records/459` - **404 ERROR**
|
|
|
|
|
- ❌ PATCH with where parameter - **404 ERROR**
|
|
|
|
|
|
|
|
|
|
**IMPORTANT: Server Restart Required**
|
|
|
|
|
The code is now correct, but you need to:
|
|
|
|
|
1. **Restart your Docker container or development server**
|
|
|
|
|
2. **Verify the API token in your .env file matches the working one**
|
|
|
|
|
3. **Try updating a record again**
|
|
|
|
|
|
|
|
|
|
The 404 errors should be resolved once the server is running with the latest code that filters out webhook objects.
|
2025-06-09 23:33:20 +02:00
|
|
|
|
2025-06-09 22:50:06 +02:00
|
|
|
## Required Environment Variables
|
|
|
|
|
|
|
|
|
|
Make sure these are set in your `.env` file:
|
|
|
|
|
|
|
|
|
|
```env
|
|
|
|
|
# Email Configuration
|
|
|
|
|
NUXT_EMAIL_ENCRYPTION_KEY=your-32-character-encryption-key
|
|
|
|
|
NUXT_EMAIL_IMAP_HOST=mail.portnimara.com
|
|
|
|
|
NUXT_EMAIL_IMAP_PORT=993
|
|
|
|
|
NUXT_EMAIL_SMTP_HOST=mail.portnimara.com
|
|
|
|
|
NUXT_EMAIL_SMTP_PORT=587
|
|
|
|
|
NUXT_EMAIL_LOGO_URL=https://portnimara.com/logo.png
|
|
|
|
|
|
|
|
|
|
# Documenso Configuration (REQUIRED for EOI generation)
|
|
|
|
|
NUXT_DOCUMENSO_API_KEY=your-actual-api-key
|
|
|
|
|
NUXT_DOCUMENSO_BASE_URL=https://signatures.portnimara.dev
|
|
|
|
|
```
|
|
|
|
|
|
2025-06-10 00:37:43 +02:00
|
|
|
### 12. EOI Management System
|
|
|
|
|
- **Added EOI Section Component**: New component to manage EOI document generation and signature links
|
|
|
|
|
- **Features Implemented**:
|
|
|
|
|
- Generate EOI button that creates documents via Documenso API
|
|
|
|
|
- Checks for existing EOI before generating new one (prevents duplicates)
|
|
|
|
|
- Displays all 3 signature links (Client, CC, Developer) with copy-to-clipboard functionality
|
|
|
|
|
- Shows EOI status badge (Awaiting Further Details, Waiting for Signatures, Signed)
|
|
|
|
|
- Regenerate option for non-signed documents
|
|
|
|
|
- **Auto-Updates on EOI Generation**:
|
|
|
|
|
- EOI Status → "Waiting for Signatures"
|
|
|
|
|
- Sales Process Level → "LOI and NDA Sent"
|
|
|
|
|
- EOI Time Sent → Current timestamp
|
|
|
|
|
- Extra Comments → Appends "EOI Sent [timestamp]"
|
|
|
|
|
- **Database Storage**: Links stored in new columns:
|
|
|
|
|
- `Signature Link Client`
|
|
|
|
|
- `Signature Link CC`
|
|
|
|
|
- `Signature Link Developer`
|
|
|
|
|
|
|
|
|
|
### 13. Auto-Save Functionality
|
|
|
|
|
- **Implemented**: Interest details now auto-save after 2 seconds of inactivity
|
|
|
|
|
- **Features**:
|
|
|
|
|
- Debounced save to prevent excessive API calls
|
|
|
|
|
- Silent save without success notifications
|
|
|
|
|
- Automatically triggers parent refresh to keep data in sync
|
|
|
|
|
- Cancels pending saves on component unmount
|
|
|
|
|
|
|
|
|
|
### 14. IMAP BCC Search Fix
|
|
|
|
|
- **Problem**: IMAP search was failing with "Cannot read properties of null"
|
|
|
|
|
- **Cause**: BCC search criteria not supported by all IMAP servers
|
|
|
|
|
- **Solution**: Removed BCC from search criteria, now only searches FROM, TO, and CC fields
|
|
|
|
|
|
2025-06-10 01:57:19 +02:00
|
|
|
### 15. MinIO Private Bucket Authentication Fix
|
|
|
|
|
- **Problem**: Email caching failed when MinIO buckets were set to private
|
|
|
|
|
- **Cause**: Frontend was trying to fetch presigned URLs which failed with CORS/auth issues
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Now reading cached emails directly on server using MinIO client
|
|
|
|
|
- No presigned URLs needed - server has full authentication
|
|
|
|
|
- Works perfectly with private buckets
|
|
|
|
|
|
|
|
|
|
### 16. Email Fetching & Caching Improvements
|
|
|
|
|
- **Optimizations**:
|
|
|
|
|
- Date-based IMAP search (last 30 days) to reduce email count
|
|
|
|
|
- Increased timeout from 15s to 30s
|
|
|
|
|
- Now caching ALL emails (both sent and received)
|
|
|
|
|
- Fire-and-forget caching to avoid slowing down email fetch
|
|
|
|
|
- Proper IMAP date format (e.g., "1-Jan-2024")
|
|
|
|
|
|
|
|
|
|
### 17. Date Display Fix
|
|
|
|
|
- **Problem**: EOI dates showing wrong format/timezone
|
|
|
|
|
- **Solution**:
|
|
|
|
|
- Enhanced date parsing to handle ISO dates, DD-MM-YYYY, and YYYY-MM-DD
|
|
|
|
|
- Now displays in DD/MM/YYYY HH:mm format
|
|
|
|
|
- Properly handles timezones
|
|
|
|
|
|
2025-06-09 22:50:06 +02:00
|
|
|
## How It Works Now
|
|
|
|
|
|
|
|
|
|
1. **Email Session Management**:
|
|
|
|
|
- Sessions are stored in browser's sessionStorage
|
|
|
|
|
- If no session exists, email features are gracefully disabled
|
|
|
|
|
- Users can connect/disconnect at any time
|
|
|
|
|
|
|
|
|
|
2. **Email Fetching**:
|
|
|
|
|
- Only attempts to fetch when valid session exists
|
|
|
|
|
- Limited to 20 emails to prevent timeouts
|
|
|
|
|
- Falls back to cached emails from MinIO if IMAP fails
|
|
|
|
|
- 15-second timeout prevents hanging connections
|
|
|
|
|
|
|
|
|
|
3. **EOI Generation**:
|
|
|
|
|
- Validates all required fields before attempting generation
|
|
|
|
|
- Checks for Documenso configuration
|
|
|
|
|
- Returns clear error messages if configuration is missing
|
|
|
|
|
- Inserts client's signing link directly into email body
|
|
|
|
|
|
|
|
|
|
## Troubleshooting
|
|
|
|
|
|
|
|
|
|
If you're still experiencing issues:
|
|
|
|
|
|
|
|
|
|
1. **Check Docker logs**: `docker logs <container-name>`
|
|
|
|
|
2. **Verify environment variables are set correctly**
|
|
|
|
|
3. **Ensure Documenso API credentials are valid**
|
|
|
|
|
4. **Try disconnecting and reconnecting email credentials**
|