mail2couch/rust
Ole-Morten Duesund 35c3c8657a feat: add TLS support to Rust implementation
- Add async-native-tls dependency for secure IMAP connections
- Implement ImapStream enum supporting both TLS and plain connections
- Add automatic TLS detection based on port (993=TLS, 143=plain, 3143=test)
- Add comprehensive Read/Write trait implementations for stream wrapper
- Add debug logging for connection type verification
- Create example configurations for Gmail, Outlook, and other providers
- Add TLS_SUPPORT.md documentation with security guidelines
- Test with existing test environment and TLS detection logic
- Maintain backward compatibility with plain IMAP for testing

The Rust implementation now supports secure connections to production
email providers while maintaining compatibility with test environments.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-02 20:01:42 +02:00
..
src feat: add TLS support to Rust implementation 2025-08-02 20:01:42 +02:00
Cargo.toml feat: add TLS support to Rust implementation 2025-08-02 20:01:42 +02:00
config-gmail-example.json feat: add TLS support to Rust implementation 2025-08-02 20:01:42 +02:00
config-tls-test.json feat: add TLS support to Rust implementation 2025-08-02 20:01:42 +02:00
README.md docs: add comprehensive CouchDB schema documentation for cross-implementation compatibility 2025-08-02 15:08:35 +02:00
TLS_SUPPORT.md feat: add TLS support to Rust implementation 2025-08-02 20:01:42 +02:00

Mail2Couch Rust Implementation

This directory contains the Rust implementation of mail2couch, which will provide the same functionality as the Go implementation while maintaining full compatibility with the CouchDB document schemas.

Current Status

🚧 Work in Progress - The Rust implementation is planned for future development.

Currently available:

  • CouchDB Schema Definitions: Complete Rust structs that match the Go implementation
  • Serialization Support: Full serde integration for JSON handling
  • Type Safety: Strongly typed structures for all CouchDB documents
  • Compatibility Tests: Validated against example documents
  • Database Naming: Same database naming logic as Go implementation

Schema Compatibility

The Rust implementation uses the same CouchDB document schemas as the Go implementation:

Mail Documents

use mail2couch::{MailDocument, generate_database_name};

let mut doc = MailDocument::new(
    "123".to_string(),        // IMAP UID
    "INBOX".to_string(),      // Mailbox
    vec!["sender@example.com".to_string()],  // From
    vec!["recipient@example.com".to_string()], // To
    "Subject".to_string(),    // Subject
    Utc::now(),              // Date
    "Body content".to_string(), // Body
    HashMap::new(),          // Headers
    false,                   // Has attachments
);

doc.set_id(); // Sets ID to "INBOX_123"

Sync Metadata

use mail2couch::SyncMetadata;

let metadata = SyncMetadata::new(
    "INBOX".to_string(),     // Mailbox
    Utc::now(),             // Last sync time
    456,                    // Last message UID
    100,                    // Message count
);
// ID automatically set to "sync_metadata_INBOX"

Database Naming

use mail2couch::generate_database_name;

let db_name = generate_database_name("Personal Gmail", "");
// Returns: "m2c_personal_gmail"

let db_name = generate_database_name("", "user@example.com");
// Returns: "m2c_user_example_com"

Dependencies

The Rust implementation uses these key dependencies:

  • serde: JSON serialization/deserialization
  • chrono: Date/time handling with ISO8601 support
  • reqwest: HTTP client for CouchDB API
  • tokio: Async runtime
  • anyhow/thiserror: Error handling

Testing

Run the schema compatibility tests:

cargo test

All tests validate that the Rust structures produce JSON compatible with the Go implementation and documented schemas.

Future Implementation

The planned Rust implementation will include:

  • IMAP Client: Connect to mail servers and retrieve messages
  • CouchDB Integration: Store documents using native Rust CouchDB client
  • Configuration: Same JSON config format as Go implementation
  • CLI Interface: Compatible command-line interface
  • Performance: Leveraging Rust's performance characteristics
  • Memory Safety: Rust's ownership model for reliable operation

Schema Documentation

See the following files for complete schema documentation:

Cross-Implementation Compatibility

Both Go and Rust implementations:

  • Use identical CouchDB document schemas
  • Generate the same database names
  • Store documents with the same field names and types
  • Support incremental sync with compatible metadata
  • Handle attachments using CouchDB native attachment storage

This ensures that databases created by either implementation can be used interchangeably.