关于curl,大家都知道它可用来访问web页面,下载文件等等。其实它的功能远不止这么点,它支持众多协议,其中就包括发送邮件的SMTP协议。
确认curl是否支持SMTP
首先确认你的curl是否支持smtp。
| 1
 | # curl-config --protocols |grep SMTP
 | 
如果不支持smtp协议,那么重新安装curl。
安装高版本curl
使用yum安装的curl一般不支持smtp协议,接下来我们使用源码包来安装。
| 1 2 3 4 5 6 7
 | # cd /usr/local/src # wget https://github.com/bagder/curl/archivemaster.zip # unzip master.zip # cd curl-master # ./buildconf # ./configure  # make && make install
 | 
安装好后再次确认是否支持smtp。
使用curl发送邮件
编写邮件内容
| 1 2 3 4 5 6
 | # cat mail.txt From:from@xxx.com To:to@xxx.com Subject: curl发送邮件标题 邮件内容。。。
 | 
发送邮件
| 1
 | # /usr/local/bin/curl -s --url "smtp://smtp.xxx.com --mail-from "from@xxx.com" --mail-rcpt "to@xxx.com" --upload-file mail.txt --user "from@xxx.com:PASSWORD"
 | 
参数说明
–url:            smtp地址
–mail-from:    发件人邮箱
–mail-rcpt:    收件人邮箱
–upload-file:    信件内容,包含发件人、收件人、标题、内容
–user:            账号密码,中间用冒号分割
curl更多协议
curl支持众多协议,详细内容可使用如下命令查看。
| 1
 | # /usr/local/bin/curl-config --protocols
 | 
zabbix curl发邮件脚本
我们通常使用sendEmail来发送告警,下面分享一个zabbix使用curl发送告警邮件的脚本。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
 | #!/bin/bash # ------------------------------------------------------------------------------- # FileName:    zabbix_curl_sendmail.sh # Revision:    1.0 # Date:        2016/02/18 # Author:      dingmingk # Email:       dingmingk@gmail.com # Website:     www.dingmingk.com # Description: use curl send email # Notes:       ~ # ------------------------------------------------------------------------------- # Copyright:   2015 (c) dingmingk # License:     GPL   MAIL_FROM='from@xxx.com' MAIL_TO=$1 MAIL_SUBJECT=$2 MAIL_CONTENT=$3 MAIL_CONTENT_FILE="/tmp/`/bin/date +%s`.txt" MAIL_SMTP='smtp://smtp.xxx.com' MAIL_USER='from@xxx.com' MAIL_PASSWORD='PASSWORD'   # create mail content file echo "From:${MAIL_FROM} To:$1 Subject: $MAIL_SUBJECT   $MAIL_CONTENT "> ${MAIL_CONTENT_FILE}   # send mail /usr/local/bin/curl -s --url "${MAIL_SMTP}" --mail-from "${MAIL_FROM}" --mail-rcpt ${MAIL_TO} --upload-file ${MAIL_CONTENT_FILE} --user "${MAIL_USER}:${MAIL_PASSWORD}"    # delete mail content file rm ${MAIL_CONTENT_FILE}
 |