diff options
author | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2004-05-03 23:15:07 +0000 |
---|---|---|
committer | hugetoad <hugetoad@97f52cf1-0a1b-0410-bd0e-c28be96e8082> | 2004-05-03 23:15:07 +0000 |
commit | ed42883f0730dd3d1d6ef76788fbfc5b830da499 (patch) | |
tree | b115e17b51033c18926fef5783592703e2526757 /include/functions.c | |
parent | 48bfc04f65ffa259f4d84b4422880a5317cfb03b (diff) | |
download | zabbix-ed42883f0730dd3d1d6ef76788fbfc5b830da499.tar.gz zabbix-ed42883f0730dd3d1d6ef76788fbfc5b830da499.tar.xz zabbix-ed42883f0730dd3d1d6ef76788fbfc5b830da499.zip |
- 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/functions.c')
-rw-r--r-- | include/functions.c | 266 |
1 files changed, 1 insertions, 265 deletions
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) { |