avila-cell

Crates.ioavila-cell
lib.rsavila-cell
version0.4.0
created_at2025-12-02 01:38:42.016916+00
updated_at2025-12-02 02:24:15.946547+00
descriptionAdvanced email protocol cells - SMTP/POP3/IMAP with MIME multipart, Base64, authentication, HTML emails - First digital life form
homepagehttps://avila.inc
repositoryhttps://github.com/avilaops/arxis
max_upload_size
id1960970
size109,444
Nícolas Ávila (avilaops)

documentation

README

Avila Cell - Advanced Email Protocol Library

First digital life form - Advanced email protocol cells with MIME multipart, authentication, and HTML support

Features

Core Protocols

  • SMTP Client: Send emails with authentication (PLAIN, LOGIN, XOAUTH2)
  • POP3 Client: Retrieve emails from POP3 servers
  • IMAP Client: Full IMAP protocol support

Advanced Email Features

  • MIME Multipart:
    • multipart/mixed - For attachments
    • multipart/alternative - For HTML + plain text
    • multipart/related - For inline images
  • Content Encoding:
    • Base64 encoding/decoding
    • Quoted-Printable encoding
    • URL encoding
  • Authentication Mechanisms:
    • PLAIN authentication
    • LOGIN authentication
    • XOAUTH2 (Gmail, Outlook)
    • CRAM-MD5 (placeholder, awaiting avila-crypto support)
  • HTML Emails: Full HTML email support with inline styles
  • Attachments: Binary file attachments with automatic Base64 encoding
  • RFC 5322 Compliance: Proper email formatting

Pure Avila Ecosystem

Zero external dependencies - built entirely on the Avila ecosystem:

  • avila-atom - Data structures
  • avila-molecule - Network protocols
  • avila-error - Error handling
  • avila-time - Temporal operations
  • avila-async - Asynchronous runtime
  • avila-crypto - Cryptographic functions
  • avila-regex - Pattern matching
  • avila-serde - Serialization

Usage

Simple Email

use avila_cell::{Email, EmailAddress, smtp::SmtpClient};

let from = EmailAddress::new("sender@example.com", None);
let to = EmailAddress::new("recipient@example.com", Some("John Doe".to_string()));

let email = Email::new(from, vec![to], "Hello", "This is a test email");

let mut client = SmtpClient::new("smtp.example.com", 587)?;
client.connect()?;
client.send_email(&email)?;

HTML Email with Attachment

use avila_cell::{Email, EmailAddress, mime::{MimePart, MultipartBuilder}};

let from = EmailAddress::new("sender@example.com", None);
let to = EmailAddress::new("recipient@example.com", None);

let mut email = Email::new(from, vec![to], "Invoice", "");

// Add HTML body
email.html_body = Some("<h1>Invoice</h1><p>Please find attached.</p>".to_string());

// Add attachment
email.attachments.push(MimePart::attachment(
    "invoice.pdf",
    "application/pdf",
    vec![/* PDF bytes */]
));

let mut client = SmtpClient::new("smtp.gmail.com", 587)?;
client.connect()?;
client.auth_plain("user@gmail.com", "password")?;
client.send_email(&email)?;

SMTP with Authentication

use avila_cell::smtp::{SmtpClient, SmtpSecurity};

let mut client = SmtpClient::with_security(
    "smtp.gmail.com",
    587,
    SmtpSecurity::StartTls
)?;

client.connect()?;

// PLAIN authentication
client.auth_plain("user@gmail.com", "password")?;

// Or LOGIN authentication
client.auth_login("user@gmail.com", "password")?;

// Or XOAUTH2 for Gmail
client.auth_xoauth2("user@gmail.com", "ya29.access_token")?;

client.send_email(&email)?;

MIME Multipart Builder

use avila_cell::mime::{MimePart, MultipartBuilder};

// Create multipart/alternative (HTML + plain text)
let multipart = MultipartBuilder::alternative()
    .add_part(MimePart::text("Plain text version"))
    .add_part(MimePart::html("<p>HTML version</p>"));

let content_type = multipart.content_type();
let body = multipart.build();

// Create multipart/mixed (with attachments)
let multipart = MultipartBuilder::mixed()
    .add_part(MimePart::text("Email body"))
    .add_part(MimePart::attachment(
        "document.pdf",
        "application/pdf",
        pdf_bytes
    ));

Encoding Utilities

use avila_cell::encoding::{base64_encode, base64_decode, quoted_printable_encode};

// Base64
let encoded = base64_encode(b"Hello World");
let decoded = base64_decode(&encoded)?;

// Quoted-Printable
let encoded = quoted_printable_encode("Héllo Wörld");

// Generate boundary for multipart
let boundary = generate_boundary();

Roadmap to v4.0

v0.3.0 (Current)

✅ MIME multipart support ✅ Base64 encoding/decoding ✅ SMTP authentication (PLAIN, LOGIN, XOAUTH2) ✅ HTML email support ✅ File attachments

v0.4.0 (Next)

  • Complete POP3 client implementation
  • Complete IMAP client implementation
  • SMTP connection pooling
  • Email queue system
  • Retry mechanisms

v1.0.0

  • S/MIME support (encryption/signing)
  • DKIM signing
  • SPF validation
  • Email templates system
  • Batch email sending

v2.0.0

  • PGP support
  • Advanced IMAP features (IDLE, SEARCH)
  • Calendar invites (iCalendar)
  • Contact cards (vCard)

v3.0.0

  • AI-powered email classification
  • Spam filtering
  • Email threading
  • Rich text editor integration

v4.0.0

  • Distributed email system
  • Blockchain-based email verification
  • Quantum-resistant encryption
  • Neural email processing

Architecture

The library is organized into modules:

  • lib.rs - Core types (Email, EmailAddress)
  • smtp.rs - SMTP client implementation
  • pop3.rs - POP3 client implementation
  • imap.rs - IMAP client implementation
  • message.rs - Email message formatting
  • mime.rs - MIME multipart support
  • encoding.rs - Content encoding utilities
  • auth.rs - Authentication mechanisms

Testing

Run the test suite:

cargo test

Run examples:

cargo run --example basic_usage
cargo run --example gmail_client

License

MIT OR Apache-2.0

Contributing

Part of the Avila ecosystem - First digital life form

Commit count: 0

cargo fmt