4 releases (breaking)
| 0.4.0 | Dec 2, 2025 |
|---|---|
| 0.3.0 | Dec 2, 2025 |
| 0.2.0 | Dec 2, 2025 |
| 0.1.0 | Dec 2, 2025 |
#109 in Email
270KB
6K
SLoC
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 attachmentsmultipart/alternative- For HTML + plain textmultipart/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 structuresavila-molecule- Network protocolsavila-error- Error handlingavila-time- Temporal operationsavila-async- Asynchronous runtimeavila-crypto- Cryptographic functionsavila-regex- Pattern matchingavila-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 implementationpop3.rs- POP3 client implementationimap.rs- IMAP client implementationmessage.rs- Email message formattingmime.rs- MIME multipart supportencoding.rs- Content encoding utilitiesauth.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
Dependencies
~9–19MB
~307K SLoC