Send HTML forms via email
This repository has been archived on 2024-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Jan-Lukas Else f79df1a8c3
All checks were successful
continuous-integration/drone/push Build is passing
Update Dockerfile
2020-10-22 20:21:32 +02:00
.drone.yml Move repo to own git and add drone CI 2020-04-26 14:50:54 +02:00
.gitignore Initial version 2020-03-15 16:21:32 +01:00
config_test.go Fix multi word spam phrases 2020-10-22 20:18:11 +02:00
config.go Fix multi word spam phrases 2020-10-22 20:18:11 +02:00
Dockerfile Update Dockerfile 2020-10-22 20:21:32 +02:00
form.html Initial version 2020-03-15 16:21:32 +01:00
forms_test.go Use pointers 2020-04-12 12:34:51 +02:00
forms.go Use pointers 2020-04-12 12:34:51 +02:00
go.mod Fix multi word spam phrases 2020-10-22 20:18:11 +02:00
go.sum Fix multi word spam phrases 2020-10-22 20:18:11 +02:00
LICENSE Add LICENSE 2020-03-15 19:56:05 +01:00
mail_test.go Use pointers 2020-04-12 12:34:51 +02:00
mail.go Fix multi word spam phrases 2020-10-22 20:18:11 +02:00
mailygo.go Use pointers 2020-04-12 12:34:51 +02:00 Blacklist 2020-03-22 10:43:45 +01:00
spamcheck_test.go Add test 2020-10-22 20:20:32 +02:00
spamcheck.go Fix multi word spam phrases 2020-10-22 20:18:11 +02:00


MailyGo is a small tool written in Go that allows to send HTML forms, for example from static websites without a dynamic backend, via email. It can be used for contact forms on pages created with Hugo (example).

MailyGo is lean and resource-saving. It can be installed with just one executable file.


MailyGo can be compiled with the following command:

go get -u

It can then be executed directly.


To run the server, you must set a few environment variables from the list below.

Name Type Default value Usage
SMTP_USER required - The SMTP user
SMTP_PASS required - The SMTP password
SMTP_HOST required - The SMTP host
SMTP_PORT optional 587 The SMTP port
EMAIL_FROM required - The sender mail address
EMAIL_TO required - Default recipient
ALLOWED_TO required - All allowed recipients (separated by ,)
PORT optional 8080 The port on which the server should listen
HONEYPOTS optional _t_email Honeypot form fields (separated by ,)
GOOGLE_API_KEY optional - Google API Key for the Google Safe Browsing API
BLACKLIST optional gambling,casino List of spam words

Special form fields

You can find a sample form in the form.html file. Only fields whose name do not start with an underscore (_) will be sent by email. Fields with an underscore serve as control fields for special purposes:

Name Type Default value Usage
_to optional - Recipient, it must be in ALLOWED_TO, hidden
_replyTo optional - Email address which should be configured as replyTo, (most probably not hidden)
_redirectTo optional - URL to redirect to, hidden
_formName optional - Name of the form, hidden
_t_email optional - (Default) "Honeypot" field, not hidden, advised (see notice below)

Spam protection

MailyGo offers the option to use a Honeypot field, which is basically another input, but it's hidden to the user with either a CSS rule or some JavaScript. It is very likely, that your public form will get the attention of some bots some day and then the spam starts. But bots try to fill every possible input field and will also fill the honeypot field. MailyGo won't send mails of form submissions where a honeypot field is filled. So you should definitely use it.

If a Google Safe Browsing API key is set, submitted URLs will also get checked for threats.


MailyGo is licensed under the MIT license, so you can do basically everything with it, but nevertheless, please contribute your improvements to make MailyGo better for everyone. See the LICENSE file.