14. februar 2004 - 19:53
Der er
28 kommentarer og 1 løsning
C++ mails?
Er der nogen måder, hvorpå man kan sende mails vha. c++? Jeg har set efter i diverse bøger og på nettet, men kan ikke finde noget...
Annonceindlæg fra Infor
14. februar 2004 - 19:55
#1
Sagtens. Du åbner en socket til port 25 på din mailserver og skriver emailen. Formatet er i RFC 821 og 822. Jeg kan også kort opridse det, hvis du vil.
14. februar 2004 - 20:27
#2
Det kunne være meget _godt med lidt reference på det.. Det er ikke noget jeg kender meget til..
14. februar 2004 - 20:34
#3
Eksempel: HELO 123.123.123.123 MAIL FROM: <mig@mitdomain.dk> RCPT TO: <dig@ditdomain.dk> DATA Return-Path: <mig@mitdomain.dk> From: mig@mitdomain.dk To: dig@ditdomain.dk Subject: Dette er en test Linie 1 Linie 2 Linie 3 . QUIT
14. februar 2004 - 20:35
#4
Alle linier afsluttes med \r\n. 123.123.123.123 er din IP adresse. Og der er mange variationer inkl. anvendelse af MIME, men dette er det allersimpleste.
14. februar 2004 - 20:52
#5
Hmm, jeg er ked af det, men jeg forstår ikke hvordan jeg skal bruge det.. Jeg er lidt grøn i C..
14. februar 2004 - 20:54
#6
Har du prøvet socket programmering før ?
14. februar 2004 - 20:55
#7
Nej, det er lige netop grunden til at jeg ikke ved hvad jeg skal gøre. :=)
14. februar 2004 - 20:57
#8
Jeg kan godt lave et komplet eksempel, men jeg ved bare ikke hvor meget du vil få ud af det. Kører du windows eller linux ?
14. februar 2004 - 20:58
#9
WindowsXP.. Eksemplet vil jeg gerne have.. Men du har ret, det er ikke sikkert, at jeg for noget ud af det.
14. februar 2004 - 21:00
#10
Ok giv mig 10 minutter.
14. februar 2004 - 21:02
#11
Finfin
14. februar 2004 - 21:15
#12
#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; }
14. februar 2004 - 21:18
#13
Kigger det lige igennem . . Vender tilbage.
14. februar 2004 - 21:29
#14
Compile fejl i: Linie 49: "buf = malloc(2000+strlen(body));" -> invalid converrsion from 'void*' to ' ??
14. februar 2004 - 21:31
#15
Nogen compilere er lidt picky. buf = (char *)malloc(2000+strlen(body));
14. februar 2004 - 21:34
#16
hm, ok.. :)
14. februar 2004 - 21:37
#17
undefined reference to `socket@12' undefined reference to `bind@12' undefined reference to `gethostbyname@4' undefined reference to `connect@12' undefined reference to `gethostname@8' undefined reference to `send@16' undefined reference to `closesocket@4' undefined reference to `WSAStartup@8' undefined reference to `WSACleanup@0' <<-- LOL§ Jeg får et hav af "undefined references"?
14. februar 2004 - 21:40
#18
Du skal linke med ws2_32.lib eller wsock32.lib !
14. februar 2004 - 21:48
#19
Tror jeg giver op indtil jeg er øvet.. Hehhe.. Jeg ved heller ikke hvordan jeg skal linke til de libs der.
14. februar 2004 - 21:55
#20
Hvad compiler bruger du i hvilken version ?
14. februar 2004 - 22:02
#21
Jeg har det i MS visual C++
14. februar 2004 - 22:02
#22
v6.0
14. februar 2004 - 22:03
#23
Så kan jeg fortælle dig hvor du tilføjer libs !
14. februar 2004 - 22:04
#24
godt! TAK
14. februar 2004 - 22:07
#25
Project Setttings Link Object/Library modules ws2_32.lib bør gøre det !
14. februar 2004 - 22:21
#26
Jeg kan godt nok kompilere det, men jeg får ingen mails.. (og mailservern er rigtig - men hvad med password til den?)
14. februar 2004 - 22:23
#27
Den forudsætter en åben mailserver som ikke kræver authentication. Har du rettet from og to til ?
14. februar 2004 - 22:27
#28
Virker ikke.. Jeg tror jeg stopper forsøgene et stykke tid. Har du evt. en mail jeg må spørge på? Og: Jeg har rettet from og to rigtigt..
14. februar 2004 - 22:29
#29
Jep. arne_v@mail.danbbs.dk
Kurser inden for grundlæggende programmering