{"id":23266141,"url":"https://github.com/raphiz/nele","last_synced_at":"2025-04-09T18:55:38.472Z","repository":{"id":57445419,"uuid":"66166775","full_name":"raphiz/nele","owner":"raphiz","description":"Send fancy markdown newsletters","archived":false,"fork":false,"pushed_at":"2020-03-09T07:15:55.000Z","size":34,"stargazers_count":21,"open_issues_count":3,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-22T20:16:16.922Z","etag":null,"topics":["mail","markdown","markdown-newsletter","newsletters"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raphiz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-20T20:29:45.000Z","updated_at":"2025-01-03T16:50:23.000Z","dependencies_parsed_at":"2022-09-26T17:30:52.012Z","dependency_job_id":null,"html_url":"https://github.com/raphiz/nele","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphiz%2Fnele","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphiz%2Fnele/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphiz%2Fnele/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raphiz%2Fnele/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raphiz","download_url":"https://codeload.github.com/raphiz/nele/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248094008,"owners_count":21046762,"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":["mail","markdown","markdown-newsletter","newsletters"],"created_at":"2024-12-19T15:52:41.471Z","updated_at":"2025-04-09T18:55:38.439Z","avatar_url":"https://github.com/raphiz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nele - Awesome Newsletters with Python\n\nWant to send a newsletter but mind big newsletter providers? Want to write your newsletters in Markdown and apply a fancy template on them? Moreover, want to do that from the command line?\n\nThen Nele is the right choice for you!\n\n## Feature Overview\n\n* Create Beautiful emails - which look great in HTML and plaintext\n* Personalize Emails with the power of Jinja Templates\n* Create custom HTML layouts\n* Write emails in Github-flavoured Markdown\n* Use any SQLite database as backend (more backends open an issue)\n\nTODO: image - markdown in editor / HTML email in Thunderbird / plain text in thunderbird\n\nNele is not limited to Newsletters - it can also be used to send emails to all (or some) members of your community, group or society.\n\n## Getting started\n\n1. Change the directory to where you want to store your newsletters\n\n    ```bash\n    cd newsletters/\n    ```\n\n2. Download the example configuration\n\n    ```bash\n    wget https://raw.githubusercontent.com/raphiz/nele/master/example/nele.yml\n    ```\n\n3. Edit the configuration and adapt it to your needs - you must at least edit sender and source. Check out the [configuration](#Configuration) section for details.\n\n    ```bash\n    vim nele.yaml\n    ```\n\n4. Time to create your template. In the example config, it is called `template.html`. You can also download an example template to get started.\n\n    ```bash\n    wget https://raw.githubusercontent.com/raphiz/nele/master/example/template.html\n    ```\n\n5. Create your first newsletter! To get started, you can use a template as well (or checkout the [configuration](#Configuration) section). This template defines an attachment. Delete the attachment section if you don't want it or download the example pdf as well.\n\n    ```bash\n    wget https://raw.githubusercontent.com/raphiz/nele/master/example/mail.md\n    wget https://raw.githubusercontent.com/raphiz/nele/master/example/demo.pdf\n    ```\n\n6. Ready to try it out? Test it before you send it to everyone using the draft method. The second parameter is the receiver\n\n    ```bash\n    nele draft mail.md YOUR@EMAIL.com\n    ```\n\n7. Everything good? If so, you can easily send it to everyone.\n\n    ```bash\n    nele send mail.md\n    ```\n\n## Limitations\n\n* We currently only supported SQLite as a backend. Create an issue if you need something else\n* The configuration file and frontmatter headers are not yet validated\n* Newsletters should always provide a way to unsubscribe. Nele has no such functionality. You could for example mention in the footer, that users can unsubscribe by replying to this email.\n\n## Configuration\n\n### nele.yml\n\n```yaml\nemail:\n    # Relative path to the template to apply to you emails\n    template: template.html\n\nsender:\n    # Your SMTP configuration\n    host: smtp.example.com\n    ssl: false\n    starttls: true\n    user: foo@example.com\n    # This value will be set in the FROM header in the email\n    sender: My Newsletter \u003cfoo@example.com\u003e\n\nsource:\n    # The backend - currently SQlite is the only choice\n    provider: sqlite\n    # Relative path from this file to the SQlite database\n    url: db.sqlite\n    # The query on the database to get all names and emails\n    # Note that you *must* have a field called `email`\n    query: SELECT * FROM users;\n\ndraft:\n    # You can specify any key: value pairs here.\n    # This is used when you run `nele draft` as an example record instead\n    # of querying the database\n    name: John\n    custom_param: Foo\n    email: baa@example.com\n```\n\n### Frontmatter header\n\nOn top of every markdown newsletter, you must provide the frontmatter header.\n\n```yaml\n---\n# Subject is always required\nsubject: \"[My Newsletter] (2016/1): Hello World.\"\n# You can provide a list of attachments here (paths are relative  to THIS file)\nattachments:\n - my.pdf\n - image.png\n---\n*Hello World*\nThis is a fancy email!\n```\n\n## Get Involved / Contribute\n\nFeel free to open new issues, submit pull requests or send me an email.\nI would love to hear from you.\n\n## Internal\n\n### Make a new release\n\n* `bumpversion release`\n* Make a new dev release `bumpversion minor --no-tag`\n* Push to github `git push \u0026\u0026 git push --tags`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphiz%2Fnele","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraphiz%2Fnele","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraphiz%2Fnele/lists"}