Problem
You would like to be able to automatically send some emails (ie reports) from a linux server, using a bash script that runs in cronjob, without installing an email server on the linux server.
Solution
here
#!/bin/bash
# Email setup
SENDGRID_API_KEY="your_sendgrid_api_key"
FILENAME_ATTACH="title_of_your_attachment"
FILENAME_ZIP="the_path_to_your_zip_file"
FILENAME_BASE64_TMP="the_path_to_temporary_base64_encoding"
EMAIL_TO="email_to_address"
EMAIL_SUBJECT="email_subject"
EMAIL_FROM="email_from_address"
EMAIL_MESSAGE="your_email_message"
function email_exports()
{
FILENAME_BASE64=$(base64 -w0 $FILENAME_ZIP);
REQUEST_DATA='{"personalizations": [{
"to": [{ "email": "'"$EMAIL_TO"'" }],
"subject": "'"$EMAIL_SUBJECT"'"
}],
"from": {
"email": "'"$EMAIL_FROM"'"
},
"content": [{
"type": "text/plain",
"value": "'"$EMAIL_MESSAGE"'"
}],
"attachments": [{
"content": "'"$FILENAME_BASE64"'",
"filename": "'"$FILENAME_ATTACH"'"
}]
}';
# We need to store the base64 locally as the text
# is too big for sending directly with curl
echo $REQUEST_DATA > $FILENAME_BASE64_TMP
curl -X "POST" "https://api.sendgrid.com/v3/mail/send" \
-H "Authorization: Bearer $SENDGRID_API_KEY" \
-H "Content-Type: application/json" \
-d "@$FILENAME_BASE64_TMP";
rm $FILENAME_BASE64_TMP
}
email_exports