Skip to content

Instantly share code, notes, and snippets.

@superdaigo
Created September 20, 2012 04:58
Show Gist options
  • Save superdaigo/3754055 to your computer and use it in GitHub Desktop.
Save superdaigo/3754055 to your computer and use it in GitHub Desktop.
Zabbix SMTP Alert script for gmail
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Zabbix SMTP Alert script for gmail.
"""
import sys
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
# Mail Account
MAIL_ACCOUNT = '[email protected]'
MAIL_PASSWORD = 'your mail password'
# Sender Name
SENDER_NAME = u'Zabbix Alert'
# Mail Server
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
# TLS
SMTP_TLS = True
def send_mail(recipient, subject, body, encoding='utf-8'):
session = None
msg = MIMEText(body, 'plain', encoding)
msg['Subject'] = Header(subject, encoding)
msg['From'] = Header(SENDER_NAME, encoding)
msg['To'] = recipient
msg['Date'] = formatdate()
try:
session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
if SMTP_TLS:
session.ehlo()
session.starttls()
session.ehlo()
session.login(MAIL_ACCOUNT, MAIL_PASSWORD)
session.sendmail(MAIL_ACCOUNT, recipient, msg.as_string())
except Exception as e:
raise e
finally:
# close session
if session:
session.quit()
if __name__ == '__main__':
"""
recipient = sys.argv[1]
subject = sys.argv[2]
body = sys.argv[3]
"""
if len(sys.argv) == 4:
send_mail(
recipient=sys.argv[1],
subject=sys.argv[2],
body=sys.argv[3])
else:
print u"""requires 3 parameters (recipient, subject, body)
\t$ zabbix-gmail.sh recipient subject body
"""
@rmsys
Copy link

rmsys commented May 29, 2017

Hi brinkdogg,

Same problem:
"Zabbix says it "done" but never get an email I've tried .sh .py - nothing. But when I test manually I get emails without issue"

@sgjava
Copy link

sgjava commented May 30, 2017

I just set this up on Zabbix 3.2.6 built from source running on Ubuntu 16.04 using https://www.jc.me.uk/2016/06/19/installing-zabbix-3-0-on-ubuntu-16-04.

  • I downloaded the script to /usr/local/share/zabbix/alertscripts and changed extension to .py
  • chmod +x *.py
  • chown -R zabbix:zabbix /usr/local/share/zabbix
  • nano zabbix-alert-smtp.py and change MAIL_ACCOUNT, MAIL_PASSWORD and SENDER_NAME
  • In UI go to Administration, Media types, Create media type and enter Type Script, Name Gmail, Script name zabbix-alert-smtp.py, add Script parameters:
    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE}
    and click Add. This is important otherwise the parameters are not passed to the script.
  • In UI add the GMail media type to your user and set up action.

If it doesn't work then change Zabbix DebugLevel=4 and restart Zabbix server and test again. Then look in log /tmp/zabbix_server.log for zabbix-alert-smtp.py and after that you should see the return code and error message.

@l0bz1k
Copy link

l0bz1k commented Aug 10, 2017

Works fine with Ubnt + Zabbbix 3.2.1 ))
Thanks to @bennetraja and others!
Don't forget to add "Script parameters" !!!

@afield1235
Copy link

@sgjava
I followed those steps and it worked for Office365. Make sure that each script parameter is on its own line. I accidentally tried copying and pasting all of them into one parameter line which doesn't work.

@raghusundaram
Copy link

I was also been experiencing the issue of not receive the alert mail.
I have done two things which solved the problem.

I have added the script parameters as suggested by @bennetraja
I have also set the media type name just as Script. not as the actual script name.

I have just created the account to share my findings here.
I am more than happy to help for those who still couldn't crack it after seeing this post.

@victortorrescosta
Copy link

It works!!! =D
Don't forget to add the script parameters as pointed about above!!! (follow sgjava's comment)

@sgjava
Copy link

sgjava commented Jul 10, 2018

OK folks, my Zabbix server sharted, so I had to rebuild it. A little different this time with ODROID XU4, mainline kernel, Ubuntu 18.04, Zabbix Server 3.4.11 and Python 3 (Python 2 not installed by default). Hopefully my loss is your gain :) Since the original script doesn't work on Python 3 you'll need to edit that. I was too lazy to do a PR :)

#!/usr/bin/env python3

from email.mime.text import MIMEText
from email.header import Header
from email.utils import formatdate

print(u'requires 3 parameters (recipient, subject, body) \t$ zabbix-gmail.sh recipient subject body')

The rest of the stuff in my previous post is still relevant.

Test with:
sudo -H -u zabbix python3 /usr/local/share/zabbix/alertscripts/zabbix-alert-smtp.py [email protected] test testbody

@CESARAUGUSTOALONKA
Copy link

Great job. This script works fine with Zabbix 4.0.5 running on Centos 7.6.1810

@alientmpl
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment