# Contributing to elektromail
Thank you for your interest in contributing to elektromail!
## How to Contribute
### Reporting Issues
- Check existing issues before creating a new one
- Include steps to reproduce the problem
- Provide relevant IMAP/SMTP protocol details if applicable
### Pull Requests
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/my-feature`)
3. Make your changes
4. Run tests: `cargo test`
5. Run clippy: `cargo clippy`
6. Format code: `cargo fmt`
7. Commit your changes
8. Push to your fork and create a pull request
### Git hooks (recommended)
To catch CI failures locally before pushing, enable the repository hooks:
```bash
git config core.hooksPath .githooks
```
The pre-push hook runs:
```bash
RUSTFLAGS="-D warnings" cargo check --tests --all-features
```
If you need to skip the hook temporarily:
```bash
SKIP_PRE_PUSH=1 git push
```
### Code Style
- Follow standard Rust conventions
- Run `cargo fmt` before committing
- Ensure `cargo clippy` passes without warnings
- Add tests for new functionality
### Testing
```bash
# Run all tests
cargo test
# Run RFC 9051 compliance tests
cargo test rfc9051
# Run with output
cargo test -- --nocapture
```
### RFC Compliance
When implementing new IMAP features, please reference RFC 9051 and add corresponding tests in `tests/rfc9051/`.
## License
By contributing, you agree that your contributions will be licensed under the European Union Public Licence v1.2 (EUPL-1.2).