- Notifications
You must be signed in to change notification settings - Fork1
A simple microservice designed in Go using Echo Microframework for sending emails and/or calendar invitations to users.
License
gdi3d/calenvite
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A simple microservice designed inGO usingEcho Microframework for sending emails and/or calendar invitations to users.
- Send emails using your Mailgun API credentials.
- Send using a standar SMTP server.
- Support for HTML and Plain Text emails.
- Calendar invitation with RSVP.
- Docker image is built using multistage and alpine image to keep it as small and secure as possible.
Download the repo and build the docker image:
$ git clone https://github.com/gdi3d/calenvite$ docker build -t calenvite_svc:latest .
and use provideddocker-compose files for more info.
$ git clone https://github.com/gdi3d/calenvite$ go get -d -v$ go mod download$ go mod verify$ go build -a -o calenvite# run de service$ ./calenvite
There's a few env vars that you need to set when you launch the container in order to work:
# If you want use Mailgun API:CALENVITE_SVC_MAILGUN_DOMAIN: The domain from which the email are going to be sentCALENVITE_SVC_MAILGUN_KEY: The Mailgun API secret key# If you want to use SMTP:CALENVITE_SVC_SMTP_HOST: The host/ip of the SMTP serverCALENVITE_SVC_SMTP_PORT: The port of the SMTP serverCALENVITE_SVC_SMTP_USER: The username to authenticate to the SMTP serverCALENVITE_SVC_SMTP_PASSWORD: The password to authenticate to the SMTP server# common to both optionsCALENVITE_SVC_EMAIL_SENDER_ADDRESS: The email address that would be used to send the email (this value will be used in the FROM part of the email)CALENVITE_SVC_SEND_USING: MAILGUN or SMTPCALENVITE_SVC_PORT: Port to expose (optional, default: 8000)
# mailgun-docker-compose.ymlversion: "3.9"services: app_backend: image: calenvite_svc:latest ports: - "8080:8000" environment: - CALENVITE_SVC_MAILGUN_DOMAIN=mycooldomain.com - CALENVITE_SVC_MAILGUN_KEY=abcd1234 - CALENVITE_SVC_EMAIL_SENDER_ADDRESS=no-reply@mycooldomain.com - CALENVITE_SVC_SEND_USING=MAILGUN
# smtp-docker-compose.ymlversion: "3.9"services: app_backend: image: calenvite_svc:latest ports: - "8080:8000" environment: - CALENVITE_SVC_SMTP_HOST=smtp.mailprovider.com - CALENVITE_SVC_SMTP_PORT=587 - CALENVITE_SVC_SMTP_USER=mysmtpuser - CALENVITE_SVC_SMTP_PASSWORD=shhhh.is.secret - CALENVITE_SVC_EMAIL_SENDER_ADDRESS=no-reply@mycooldomain.com - CALENVITE_SVC_SEND_USING=SMTP
A healthcheck endpoint to test if the service is up and running and a valid configuration is present.
Note: This healthcheck is only going to check that the environment vars are defined. It will not check if the credentials are valid or not
/healthcheck/
curl --location --request GET 'http://127.0.0.1:8080/healthcheck'
Service ok
HTTP/1.1 200 Content-Type: application/json; charset=UTF-8Vary: Accept-Encodingnull
Service not working
HTTP/1.1 500 Internal Server Error Content-Type: application/json; charset=UTF-8Vary: Accept-Encoding{ "message": "Internal Server Error"}
Send email, and optionally, an calendar invitation with RSVP to the users.
/invite/
{ "users": [ { "full_name": "Eric Cartman", "email": "ihateyouguys@southpark.cc" }, { "full_name": "Tina belcher", "email": "aaaooo@bobsburger.com" } ], "invitation": { "start_at": "2030-10-12T07:20:50.52Z", "end_at": "2030-10-12T08:20:50.52Z", "organizer_email": "meetingorganizer@meeting.com", "organizer_full_name": "Mr. Mojo Rising", "summary": "This meeting will be about...", "location": "https://zoom.us/332324342", "description": "Voluptatum ut quis ut. Voluptas qui pariatur quo. Omnis enim rerum dolorum. Qui aut est sed qui voluptatem harum. Consequuntur et accusantium culpa est fuga molestiae in ut. Numquam harum" }, "email_subject": "You've just been invited!", "email_body": "<html><body><h1>email body about the invitation/event</h1></body></html>", "email_is_html": true}
Notes about fields:
- If you don't need to send a calendar invitation you can omit the field
invitation
- If you want to send plain text messages set the key
email_is_html
tofalse
curl --location --request POST 'http://127.0.0.1:8080/invite/' \--header 'Content-Type: application/json' \--data-raw '{"users":[{"full_name":"Eric Cartman","email":"ihateyouguys@southpark.cc"},{"full_name":"Tina belcher","email":"aaaooo@bobsburger.com"}],"invitation":{"start_at":"2030-10-12T07:20:50.52Z","end_at":"2030-10-12T08:20:50.52Z","organizer_email":"meetingorganizer@meeting.com","organizer_full_name":"Mr. Mojo Rising","summary":"This meeting will be about...","location":"https://zoom.us/332324342","description":"Voluptatum ut quis ut. Voluptas qui pariatur quo. Omnis enim rerum dolorum. Qui aut est sed qui voluptatem harum. Consequuntur et accusantium culpa est fuga molestiae in ut. Numquam harum"},"email_subject":"You'\''ve just been invited!","email_body":"<html><body><h1>email body about the invitation/event</h1></body></html>","email_is_html":true}'
Successful
HTTP/1.1 200 Content-Type: application/json; charset=UTF-8Vary: Accept-Encoding{ "message": "SENT_OK", "status_code": 200, "error_fields": null}
Field missing/invalid
HTTP/1.1 400 BAD REQUESTContent-Type: application/json; charset=UTF-8Vary: Accept-Encoding{ "message": "INVALID_PAYLOAD", "status_code": 400, "error_fields": [ { "field": "email_body", "message": "", "code": "required" } ]}
Error
HTTP/1.1 500 Internal Server ErrorContent-Type: application/json; charset=UTF-8Vary: Accept-Encoding{ "message": "ERROR", "status_code": 500, "error_fields": null}
You canContact me 🙋🏻♂️ on LinkedIn if you have any questions. Otherwise you can open a ticket 😉
About
A simple microservice designed in Go using Echo Microframework for sending emails and/or calendar invitations to users.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.