A cross-platform desktop application for easily sending PDF files to GoodNotes via email. Built with Rust and Iced for a native, fast, and secure experience.
- 📁 File Selection: Choose PDF files using a file dialog or drag-and-drop interface
- ✏️ File Management: Rename files before sending with inline editing
- 📧 Email Integration: Send PDFs directly to your GoodNotes email address
- 🔒 Secure Settings: Encrypted storage of email credentials using AES-256-GCM
- 🎨 Modern UI: Clean, dark-themed interface built with Iced
- 🖱️ Intuitive UX: Click outside to commit edits, visual feedback for all actions
- ⚡ Performance: Native Rust performance with GPU-accelerated rendering
- Add Files: Use the "Open file(s)" button or drag and drop PDF files into the application
- Edit Names: Click on any file name to rename it (useful for organizing in GoodNotes)
- Configure Email: Set up your SMTP settings in the secure settings panel
- Send: Click "Send" to email your PDFs directly to your GoodNotes import address
- Rust - Systems programming language for performance and safety
- Iced - Cross-platform GUI framework with GPU acceleration
- lettre - SMTP email client for sending attachments
- SMTP - Standard email protocol for reliable delivery
- aes-gcm - AES-256-GCM encryption for settings storage
- base64 - Encoding for encrypted data
- dirs - Platform-appropriate config directories
- whoami - Machine identification for encryption keys
- rfd - Native file dialogs
- serde - Serialization for configuration management
- GPU Rendering - Hardware-accelerated UI via wgpu backend
- Nix - Reproducible development environment
- Cargo - Rust package manager and build system
- Rust 1.88+ (or use the provided Nix flake)
- Git
# Clone the repository
git clone git@github.com:chxlky/send-to-goodnotes.git
cd send-to-goodnotes
# Build and run
cargo run --release# Enter development environment
nix develop
# Build and run
cargo run --release
# Optionally, compile for Windows
cargo build --release --target x86_64-pc-windows-gnuThe application requires SMTP configuration to send emails:
- SMTP Host: Your email provider's SMTP server (e.g.,
smtp.gmail.com) - SMTP Port: Usually 587 for TLS or 465 for SSL
- From Email: Your email address
- To Email: Your GoodNotes import email address
- App Password: App-specific password (recommended over regular passwords)
- Enable 2-factor authentication
- Generate an app-specific password from the Google Cloud Console
- Use
smtp.gmail.comwith port587
- All email credentials are encrypted using AES-256-GCM and stored locally
- Encryption keys are derived from machine-specific identifiers
- Settings are stored in platform-appropriate configuration directories
- File Limits: Maximum 5 PDFs per email
- Drag & Drop: Works on most platforms (may have limitations on some Linux desktop environments)
- Editing: Click any filename to rename it, press Enter or click outside to save
- Status Feedback: Color-coded status messages show success (green) or errors (red)
src/
├── main.rs # Main application logic and message handling
├── email.rs # Email sending functionality
├── config.rs # Encrypted settings management
└── app/
├── mod.rs # Module declarations
├── messages.rs # Application message types
├── state.rs # Application state management
├── view.rs # UI rendering and styling
└── widgets/
├── mod.rs # Widget module declarations
└── outside_commit.rs # Custom widget for edit behavior
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.
- Verify SMTP settings are correct
- Check that app passwords are enabled for your email provider
- Ensure firewall isn't blocking SMTP ports
- Some Linux desktop environments have limitations with drag & drop
- Use the "Open file(s)" button as an alternative
- Ensure PDF files haven't been moved or deleted after selection
- Try re-adding the files if they've been relocated