{"id":17145959,"url":"https://github.com/foxcpp/go-imap-sql","last_synced_at":"2025-05-09T00:04:37.226Z","repository":{"id":35005032,"uuid":"172118887","full_name":"foxcpp/go-imap-sql","owner":"foxcpp","description":"SQL-based storage backend for go-imap v2","archived":false,"fork":false,"pushed_at":"2025-01-24T14:00:25.000Z","size":468,"stargazers_count":26,"open_issues_count":22,"forks_count":12,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-09T00:04:29.140Z","etag":null,"topics":["imap","imap-server","mail"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/foxcpp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-22T18:55:37.000Z","updated_at":"2025-01-27T10:01:36.000Z","dependencies_parsed_at":"2024-01-20T18:47:25.647Z","dependency_job_id":"b1c05e0c-5f32-4d6b-8d19-3d64e99c49e6","html_url":"https://github.com/foxcpp/go-imap-sql","commit_stats":{"total_commits":286,"total_committers":4,"mean_commits":71.5,"dds":"0.020979020979020935","last_synced_commit":"655e4cb87d20312621e67eb6add387518082ce9c"},"previous_names":["foxcpp/go-sqlmail"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-imap-sql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-imap-sql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-imap-sql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-imap-sql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foxcpp","download_url":"https://codeload.github.com/foxcpp/go-imap-sql/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253166514,"owners_count":21864475,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["imap","imap-server","mail"],"created_at":"2024-10-14T21:07:22.038Z","updated_at":"2025-05-09T00:04:37.196Z","avatar_url":"https://github.com/foxcpp.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"go-imap-sql\n[![Travis CI](https://img.shields.io/travis/com/foxcpp/go-imap-sql.svg?style=flat-square\u0026logo=Linux)](https://travis-ci.com/foxcpp/go-imap-sql)\n[![CodeCov](https://img.shields.io/codecov/c/github/foxcpp/go-imap-sql.svg?style=flat-square)](https://codecov.io/gh/foxcpp/go-imap-sql)\n[![Reference](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/foxcpp/go-imap-sql)\n[![stability-unstable](https://img.shields.io/badge/stability-unstable-yellow.svg?style=flat-square)](https://github.com/emersion/stability-badges#unstable)\n=============\n\nSQL-based storage backend for [go-imap] library.\n\nBuilding\n----------\n\nGo 1.13 is required due to use of Go 1.13 error inspection features.\n\nRDBMS support\n---------------\n\ngo-imap-sql is known to work with (and constantly being tested against) following RDBMS:\n- SQLite 3.25.0\n- PostgreSQL 9.6\n\nFollowing RDBMS have experimental support:\n- CockroachDB 20.1.5\n\nFollowing RDBMS were actively supported in the past, it's unknown whether they\nstill work with go-imap-sql:\n- MariaDB 10.2 \n\nIMAP Extensions Supported\n---------------------------\n\n- [CHILDREN]\n- [APPEND-LIMIT]\n- [MOVE]\n- [SPECIAL-USE]\n- [SORT]\n\nAuthentication\n----------------\n\ngo-imap-sql does not implement any authentication. \"password\" argument of Login\nmethod is not checked and the user account is created if it does not exist. You\nare supposed to wrap it to implement your own authentication the way you need\nit.\n\nUsernames case-insensitivity\n------------------------------\n\nUsernames are always converted to lower-case before doing anything.\nThis means that if you type `imapsql-ctl ... users create FOXCPP`.  Account\nwith username `foxcpp` will be created. Also this means that you can use any\ncase in account settings in your IMAP client.\n\nsecure_delete\n-------------\n\nYou may want to overwrite deleted messages and theirs meta-data with zeroes for\nsecurity/privacy reasons.\nFor MySQL, PostgreSQL - consult documentation (AFAIK, there is no such option).\n\nFor SQLite3, you should build go-imap-sql with `sqlite_secure_delete` build tag.\nIt will enable corresponding SQLite3 feature by default for all databases.\n\nIf you want to enable it per-database - you can use\n`file:PATH?_secure_delete=ON` in DSN.\n\nUIDVALIDITY\n-------------\n\ngo-imap-sql never invalidates UIDs in an existing mailbox. If mailbox is\nDELETE'd then UIDVALIDITY value changes.\n\nUnlike many popular IMAP server implementations, go-imap-sql uses randomly\ngenerated UIDVALIDITY values instead of timestamps.\n\nThis makes several things easier to implement with less edge cases. And answer\nto the question you are already probably asked: To make go-imap-sql malfunction\nyou need to get Go's PRNG to generate two equal integers in range of [1,\n2^32-1] just at right moment (seems unlikely enough to ignore it). Even then,\nit will not cause much problems due to the way most client implementations\nwork.\n\ngo-imap-sql uses separate `math/rand.Rand` instance and seeds it with system\ntime on initialization (in `New`).\n\nYou can provide custom pre-seeded struct implementing `math/rand.Source` \nin `Opts` struct (`PRNG` field).\n\nMaddy\n-------\n\nYou can use go-imap-sql as part of the [maddy] mail server.\n\nimapsql-ctl\n-------------\n\nFor direct access to database you can use imapsql-ctl console utility. See more information in\nseparate README [here](cmd/imapsql-ctl).\n```\ngo install github.com/foxcpp/go-imap-sql/cmd/imapsql-ctl\n```\n\n[CHILDREN]: https://tools.ietf.org/html/rfc3348\n[APPEND-LIMIT]: https://tools.ietf.org/html/rfc7889\n[UIDPLUS]: https://tools.ietf.org/html/rfc4315\n[MOVE]: https://tools.ietf.org/html/rfc6851\n[SPECIAL-USE]: https://tools.ietf.org/html/rfc6154\n[SORT]: https://tools.ietf.org/html/rfc5256\n[go-imap]: https://github.com/emersion/go-imap\n[maddy]: https://github.com/emersion/maddy\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoxcpp%2Fgo-imap-sql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffoxcpp%2Fgo-imap-sql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoxcpp%2Fgo-imap-sql/lists"}