summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2004-05-03 23:15:07 +0000
committerhugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2004-05-03 23:15:07 +0000
commited42883f0730dd3d1d6ef76788fbfc5b830da499 (patch)
treeb115e17b51033c18926fef5783592703e2526757 /include
parent48bfc04f65ffa259f4d84b4422880a5317cfb03b (diff)
- email routines moved to email.c (Alexei)
git-svn-id: svn://svn.zabbix.com/trunk@1330 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'include')
-rw-r--r--include/email.c305
-rw-r--r--include/email.h26
-rw-r--r--include/functions.c266
3 files changed, 332 insertions, 265 deletions
diff --git a/include/email.c b/include/email.c
new file mode 100644
index 00000000..3c0e8bc1
--- /dev/null
+++ b/include/email.c
@@ -0,0 +1,305 @@
+/*
+** Zabbix
+** Copyright (C) 2000,2001,2002,2003,2004 Alexei Vladishev
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <netinet/in.h>
+#include <netdb.h>
+
+#include <signal.h>
+
+#include <string.h>
+
+#include <time.h>
+
+#include <sys/socket.h>
+#include <errno.h>
+
+#include "common.h"
+#include "log.h"
+
+#include "email.h"
+
+/*
+ * Send email
+ */
+int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,char *mailsubject,char *mailbody)
+{
+ int s;
+ int i,e;
+ char c[MAX_STRING_LEN];
+ struct hostent *hp;
+
+ struct sockaddr_in myaddr_in;
+ struct sockaddr_in servaddr_in;
+
+ char *OK_220="220";
+ char *OK_250="250";
+ char *OK_251="251";
+ char *OK_354="354";
+
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL");
+
+ servaddr_in.sin_family=AF_INET;
+ hp=gethostbyname(smtp_server);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL2");
+ if(hp==NULL)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Cannot get IP for mailserver [%s]",smtp_server);
+ return FAIL;
+ }
+
+ servaddr_in.sin_addr.s_addr=((struct in_addr *)(hp->h_addr))->s_addr;
+ servaddr_in.sin_port=htons(25);
+
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL3");
+
+/* if(hp==NULL)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Cannot get IP for mailserver [%s]",smtp_server);
+ return FAIL;
+ }
+
+ servaddr_in.sin_addr.s_addr=((struct in_addr *)(hp->h_addr))->s_addr;
+ servaddr_in.sin_port=htons(25);*/
+
+ s=socket(AF_INET,SOCK_STREAM,0);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL4");
+ if(s == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Cannot create socket");
+ return FAIL;
+ }
+
+ myaddr_in.sin_family = AF_INET;
+ myaddr_in.sin_port=0;
+ myaddr_in.sin_addr.s_addr=INADDR_ANY;
+
+ if( connect(s,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 )
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Cannot connect to SMTP server [%s]",smtp_server);
+ close(s);
+ return FAIL;
+ }
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL5");
+
+ memset(c,0,MAX_STRING_LEN);
+/* i=sizeof(struct sockaddr_in);
+ i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
+ i=read(s,c,MAX_STRING_LEN);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL6");
+ if(i == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error receiving initial string from SMTP server [%m]");
+ close(s);
+ return FAIL;
+ }
+ if(strncmp(OK_220,c,strlen(OK_220)) != 0)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "No welcome message 220* [%s]", c);
+ close(s);
+ return FAIL;
+ }
+
+ if(strlen(smtp_helo) != 0)
+ {
+ memset(c,0,MAX_STRING_LEN);
+ snprintf(c,sizeof(c)-1,"HELO %s\r\n",smtp_helo);
+/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
+ e=write(s,c,strlen(c));
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL7");
+ if(e == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error sending HELO to mailserver.");
+ close(s);
+ return FAIL;
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+/* i=sizeof(struct sockaddr_in);
+ i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
+ i=read(s,c,MAX_STRING_LEN);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL8");
+ if(i == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on HELO request [%m]");
+ close(s);
+ return FAIL;
+ }
+ if(strncmp(OK_250,c,strlen(OK_250)) != 0)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Wrong answer on HELO [%s]",c);
+ close(s);
+ return FAIL;
+ }
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+/* sprintf(c,"MAIL FROM: %s\r\n",smtp_email);*/
+ snprintf(c,sizeof(c)-1,"MAIL FROM: <%s>\r\n",smtp_email);
+/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
+ e=write(s,c,strlen(c));
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL9");
+ if(e == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error sending MAIL FROM to mailserver.");
+ close(s);
+ return FAIL;
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+/* i=sizeof(struct sockaddr_in);
+ i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
+ i=read(s,c,MAX_STRING_LEN);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL10");
+ if(i == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on MAIL FROM request [%m]");
+ close(s);
+ return FAIL;
+ }
+ if(strncmp(OK_250,c,strlen(OK_250)) != 0)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Wrong answer on MAIL FROM [%s]", c);
+ close(s);
+ return FAIL;
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+ snprintf(c,sizeof(c)-1,"RCPT TO: <%s>\r\n",mailto);
+/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
+ e=write(s,c,strlen(c));
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL11");
+ if(e == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error sending RCPT TO to mailserver.");
+ close(s);
+ return FAIL;
+ }
+ memset(c,0,MAX_STRING_LEN);
+/* i=sizeof(struct sockaddr_in);
+ i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
+ i=read(s,c,MAX_STRING_LEN);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL12");
+ if(i == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on RCPT TO request [%m]");
+ close(s);
+ return FAIL;
+ }
+ /* May return 251 as well: User not local; will forward to <forward-path>. See RFC825 */
+ if( strncmp(OK_250,c,strlen(OK_250)) != 0 && strncmp(OK_251,c,strlen(OK_251)) != 0)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Wrong answer on RCPT TO [%s]", c);
+ close(s);
+ return FAIL;
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+ snprintf(c,sizeof(c)-1,"DATA\r\n");
+/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
+ e=write(s,c,strlen(c));
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL13");
+ if(e == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error sending DATA to mailserver.");
+ close(s);
+ return FAIL;
+ }
+ memset(c,0,MAX_STRING_LEN);
+/* i=sizeof(struct sockaddr_in);
+ i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
+ i=read(s,c,MAX_STRING_LEN);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL14");
+ if(i == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error receivng answer on DATA request [%m]");
+ close(s);
+ return FAIL;
+ }
+ if(strncmp(OK_354,c,strlen(OK_354)) != 0)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Wrong answer on DATA [%s]", c);
+ close(s);
+ return FAIL;
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+/* sprintf(c,"Subject: %s\r\n%s",mailsubject, mailbody);*/
+ snprintf(c,sizeof(c)-1,"From:<%s>\r\nTo:<%s>\r\nSubject: %s\r\n\r\n%s",smtp_email,mailto,mailsubject, mailbody);
+/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
+ e=write(s,c,strlen(c));
+ if(e == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error sending mail subject and body to mailserver.");
+ close(s);
+ return FAIL;
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+ snprintf(c,sizeof(c)-1,"\r\n.\r\n");
+/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
+ e=write(s,c,strlen(c));
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL15");
+ if(e == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error sending . to mailserver.");
+ close(s);
+ return FAIL;
+ }
+ memset(c,0,MAX_STRING_LEN);
+/* i=sizeof(struct sockaddr_in);
+ i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
+ i=read(s,c,MAX_STRING_LEN);
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL16");
+ if(i == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error receivng answer on . request [%m]");
+ close(s);
+ return FAIL;
+ }
+ if(strncmp(OK_250,c,strlen(OK_250)) != 0)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Wrong answer on end of data [%s]", c);
+ close(s);
+ return FAIL;
+ }
+
+ memset(c,0,MAX_STRING_LEN);
+ snprintf(c,sizeof(c)-1,"QUIT\r\n");
+/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
+ e=write(s,c,strlen(c));
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL18");
+ if(e == -1)
+ {
+ zabbix_log(LOG_LEVEL_ERR, "Error sending QUIT to mailserver.");
+ close(s);
+ return FAIL;
+ }
+
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL19");
+ close(s);
+
+ zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL. END.");
+
+ return SUCCEED;
+}
diff --git a/include/email.h b/include/email.h
new file mode 100644
index 00000000..a80b9830
--- /dev/null
+++ b/include/email.h
@@ -0,0 +1,26 @@
+/*
+** Zabbix
+** Copyright (C) 2000,2001,2002,2003,2004 Alexei Vladishev
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+**/
+
+
+#ifndef ZABBIX_EMAIL_H
+#define ZABBIX_EMAIL_H
+
+int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,char *mailsubject,char *mailbody);
+
+#endif
diff --git a/include/functions.c b/include/functions.c
index 3c02fe64..27605490 100644
--- a/include/functions.c
+++ b/include/functions.c
@@ -42,6 +42,7 @@
#include "functions.h"
#include "expression.h"
+#include "email.h"
/* Delete trailing zeroes */
/* 10.0100 -> 10.01, 10. -> 10 */
@@ -542,271 +543,6 @@ void update_functions(DB_ITEM *item)
DBfree_result(result);
}
-/*
- * Send email
- */
-int send_email(char *smtp_server,char *smtp_helo,char *smtp_email,char *mailto,char *mailsubject,char *mailbody)
-{
- int s;
- int i,e;
- char c[MAX_STRING_LEN];
- struct hostent *hp;
-
- struct sockaddr_in myaddr_in;
- struct sockaddr_in servaddr_in;
-
- char *OK_220="220";
- char *OK_250="250";
- char *OK_251="251";
- char *OK_354="354";
-
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL");
-
- servaddr_in.sin_family=AF_INET;
- hp=gethostbyname(smtp_server);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL2");
- if(hp==NULL)
- {
- zabbix_log(LOG_LEVEL_ERR, "Cannot get IP for mailserver [%s]",smtp_server);
- return FAIL;
- }
-
- servaddr_in.sin_addr.s_addr=((struct in_addr *)(hp->h_addr))->s_addr;
- servaddr_in.sin_port=htons(25);
-
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL3");
-
-/* if(hp==NULL)
- {
- zabbix_log(LOG_LEVEL_ERR, "Cannot get IP for mailserver [%s]",smtp_server);
- return FAIL;
- }
-
- servaddr_in.sin_addr.s_addr=((struct in_addr *)(hp->h_addr))->s_addr;
- servaddr_in.sin_port=htons(25);*/
-
- s=socket(AF_INET,SOCK_STREAM,0);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL4");
- if(s == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Cannot create socket");
- return FAIL;
- }
-
- myaddr_in.sin_family = AF_INET;
- myaddr_in.sin_port=0;
- myaddr_in.sin_addr.s_addr=INADDR_ANY;
-
- if( connect(s,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)) == -1 )
- {
- zabbix_log(LOG_LEVEL_ERR, "Cannot connect to SMTP server [%s]",smtp_server);
- close(s);
- return FAIL;
- }
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL5");
-
- memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
- i=read(s,c,MAX_STRING_LEN);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL6");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving initial string from SMTP server.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_220,c,strlen(OK_220)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "No welcome message 220* [%s]", c);
- close(s);
- return FAIL;
- }
-
- if(strlen(smtp_helo) != 0)
- {
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"HELO %s\r\n",smtp_helo);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL7");
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending HELO to mailserver.");
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
- i=read(s,c,MAX_STRING_LEN);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL8");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on HELO request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_250,c,strlen(OK_250)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on HELO [%s]",c);
- close(s);
- return FAIL;
- }
- }
-
- memset(c,0,MAX_STRING_LEN);
-/* sprintf(c,"MAIL FROM: %s\r\n",smtp_email);*/
- snprintf(c,sizeof(c)-1,"MAIL FROM: <%s>\r\n",smtp_email);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL9");
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending MAIL FROM to mailserver.");
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
- i=read(s,c,MAX_STRING_LEN);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL10");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on MAIL FROM request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_250,c,strlen(OK_250)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on MAIL FROM [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"RCPT TO: <%s>\r\n",mailto);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL11");
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending RCPT TO to mailserver.");
- close(s);
- return FAIL;
- }
- memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
- i=read(s,c,MAX_STRING_LEN);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL12");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receiving answer on RCPT TO request.");
- close(s);
- return FAIL;
- }
- /* May return 251 as well: User not local; will forward to <forward-path>. See RFC825 */
- if( strncmp(OK_250,c,strlen(OK_250)) != 0 && strncmp(OK_251,c,strlen(OK_251)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on RCPT TO [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"DATA\r\n");
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL13");
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending DATA to mailserver.");
- close(s);
- return FAIL;
- }
- memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
- i=read(s,c,MAX_STRING_LEN);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL14");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receivng answer on DATA request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_354,c,strlen(OK_354)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on DATA [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
-/* sprintf(c,"Subject: %s\r\n%s",mailsubject, mailbody);*/
- snprintf(c,sizeof(c)-1,"From:<%s>\r\nTo:<%s>\r\nSubject: %s\r\n\r\n%s",smtp_email,mailto,mailsubject, mailbody);
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending mail subject and body to mailserver.");
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"\r\n.\r\n");
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL15");
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending . to mailserver.");
- close(s);
- return FAIL;
- }
- memset(c,0,MAX_STRING_LEN);
-/* i=sizeof(struct sockaddr_in);
- i=recvfrom(s,c,MAX_STRING_LEN,0,(struct sockaddr *)&servaddr_in,&i);*/
- i=read(s,c,MAX_STRING_LEN);
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL16");
- if(i == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error receivng answer on . request.");
- close(s);
- return FAIL;
- }
- if(strncmp(OK_250,c,strlen(OK_250)) != 0)
- {
- zabbix_log(LOG_LEVEL_ERR, "Wrong answer on end of data [%s]", c);
- close(s);
- return FAIL;
- }
-
- memset(c,0,MAX_STRING_LEN);
- snprintf(c,sizeof(c)-1,"QUIT\r\n");
-/* e=sendto(s,c,strlen(c),0,(struct sockaddr *)&servaddr_in,sizeof(struct sockaddr_in)); */
- e=write(s,c,strlen(c));
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL18");
- if(e == -1)
- {
- zabbix_log(LOG_LEVEL_ERR, "Error sending QUIT to mailserver.");
- close(s);
- return FAIL;
- }
-
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL19");
- close(s);
-
- zabbix_log( LOG_LEVEL_DEBUG, "SENDING MAIL. END.");
-
- return SUCCEED;
-}
-
/* Cannot use action->userid as it may also represent groupd id*/
void send_to_user_medias(DB_TRIGGER *trigger,DB_ACTION *action, int userid)
{