Annonceindlæg fra Deloitte
11. februar 2008 - 13:37
#1
Eksempel til Windows med socket interface: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <windows.h> #include <errno.h> void mailsend(char *hostname,char *to,char * from,char *subj,char *body) { int sd,status,tmp; char *buf,ownhost[100]; struct sockaddr local,remote; struct hostent *hostinfo; /* create socket */ sd=socket(AF_INET,SOCK_STREAM,0); if(sd<0) { printf("Error creating socket: %s\n",strerror(errno)); goto fin; } /* bind socket */ local.sa_family=AF_INET; memset(local.sa_data,0,sizeof(local.sa_data)); status=bind(sd,&local,sizeof(local)); if(status<0) { printf("Error binding socket: %s\n",strerror(errno)); goto fin; } /* lookup host */ hostinfo=gethostbyname(hostname); if(!hostinfo) { printf("Error looking up host: %s\n",hostname); goto fin; } /* connect to host */ remote.sa_family=hostinfo->h_addrtype; memcpy(remote.sa_data+2,hostinfo->h_addr_list[0],hostinfo->h_length); *((short *)remote.sa_data)=25; tmp=remote.sa_data[0]; remote.sa_data[0]=remote.sa_data[1]; remote.sa_data[1]=tmp; status=connect(sd,&remote,sizeof(remote)); if(status!=0) { printf("Error connecting to host: %s port: %d\n",hostname,25); goto fin; } /* send email */ gethostname(ownhost,sizeof(ownhost)); buf = malloc(2000+strlen(body)); sprintf(buf,"HELO %s\r\n" "MAIL FROM: <%s>\r\n" "RCPT TO: <%s>\r\n" "DATA\r\n" "Return-Path: <%s>\r\n" "From: %s\r\n" "To: %s\r\n" "Subject: %s\r\n" "\r\n" "%s\r\n" ".\r\n" "QUIT\r\n",ownhost,from,to,from,from,to,subj,body); status=send(sd,buf,strlen(buf),0); if(status<0) { printf("Error sending GET request\n"); goto fin; } free(buf); fin: closesocket(sd); return; } int main(int argc,char *argv[]) { WSADATA WSAData; WSAStartup(0x0101,&WSAData); mailsend("minmailserver", "dig@ditdomain.dk", "mig@mitdomain.dk", "Dette er en test", "Linie 1\r\nLinie 2\r\nLinie 3"); WSACleanup(); return 0; }