A RESTful email service API built with Go.
- Send emails with plain text or HTML content
- Support for CC and BCC recipients
- Support for file attachments
- JSON API with proper error handling
- Configurable SMTP settings via environment variables
- Go 1.18 or newer
- SMTP server access (e.g., Gmail)
Create a .env file in the project root with the following variables:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
SMTP_FROM_NAME=DifyGate Email Service
For Gmail, you'll need to create an "App Password" in your Google Account security settings.
go mod tidy
go run main.goThe server will start on port 6001.
#POST /api/v1/emails/send
curl -X POST http://localhost:6001/api/v1/emails/send \
-H "Content-Type: application/json" \
-d '{
"to": ["recipient@example.com"],
"subject": "Hello from DifyGate",
"body": "This is a test email from DifyGate API"
}'
Request body:
{
"to": ["recipient@example.com"],
"cc": ["cc-recipient@example.com"],
"bcc": ["bcc-recipient@example.com"],
"subject": "Hello from DifyGate",
"body": "This is a test email from DifyGate API",
"is_html": false,
"attachments": [
{
"filename": "test.txt",
"data": "SGVsbG8gV29ybGQh",
"mime_type": "text/plain"
}
]
}to: Array of recipient email addresses (required)cc: Array of CC recipient email addresses (optional)bcc: Array of BCC recipient email addresses (optional)subject: Email subject (required)body: Email body content (required)is_html: Set to true if the body is HTML content (default: false)attachments: Array of file attachments (optional)filename: Name of the filedata: Base64-encoded file contentmime_type: MIME type of the file
Response:
{
"message": "Email sent successfully"
}# GET /api/v1/health
curl http://localhost:6001/api/v1/health
Response:
{
"status": "ok",
"service": "DifyGate",
"timestamp": "2025-03-06T12:34:56Z"
}