Avatar billede dang3r Nybegynder
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...
Avatar billede arne_v Ekspert
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.
Avatar billede dang3r Nybegynder
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..
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
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.
Avatar billede dang3r Nybegynder
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..
Avatar billede arne_v Ekspert
14. februar 2004 - 20:54 #6
Har du prøvet socket programmering før ?
Avatar billede dang3r Nybegynder
14. februar 2004 - 20:55 #7
Nej, det er lige netop grunden til at jeg ikke ved hvad jeg skal gøre. :=)
Avatar billede arne_v Ekspert
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 ?
Avatar billede dang3r Nybegynder
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.
Avatar billede arne_v Ekspert
14. februar 2004 - 21:00 #10
Ok giv mig 10 minutter.
Avatar billede dang3r Nybegynder
14. februar 2004 - 21:02 #11
Finfin
Avatar billede arne_v Ekspert
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;
}
Avatar billede dang3r Nybegynder
14. februar 2004 - 21:18 #13
Kigger det lige igennem . .  Vender tilbage.
Avatar billede dang3r Nybegynder
14. februar 2004 - 21:29 #14
Compile fejl i: Linie 49: "buf = malloc(2000+strlen(body));" -> invalid converrsion from 'void*' to '
??
Avatar billede arne_v Ekspert
14. februar 2004 - 21:31 #15
Nogen compilere er lidt picky.

buf = (char *)malloc(2000+strlen(body));
Avatar billede dang3r Nybegynder
14. februar 2004 - 21:34 #16
hm, ok.. :)
Avatar billede dang3r Nybegynder
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"?
Avatar billede arne_v Ekspert
14. februar 2004 - 21:40 #18
Du skal linke med ws2_32.lib eller wsock32.lib !
Avatar billede dang3r Nybegynder
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.
Avatar billede arne_v Ekspert
14. februar 2004 - 21:55 #20
Hvad compiler bruger du i hvilken version ?
Avatar billede dang3r Nybegynder
14. februar 2004 - 22:02 #21
Jeg har  det i MS visual C++
Avatar billede dang3r Nybegynder
14. februar 2004 - 22:02 #22
v6.0
Avatar billede arne_v Ekspert
14. februar 2004 - 22:03 #23
Så kan jeg fortælle dig hvor du tilføjer libs !
Avatar billede dang3r Nybegynder
14. februar 2004 - 22:04 #24
godt! TAK
Avatar billede arne_v Ekspert
14. februar 2004 - 22:07 #25
Project
Setttings
Link
Object/Library modules
ws2_32.lib

bør gøre det !
Avatar billede dang3r Nybegynder
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?)
Avatar billede arne_v Ekspert
14. februar 2004 - 22:23 #27
Den forudsætter en åben mailserver som ikke kræver authentication.

Har du rettet from og to til ?
Avatar billede dang3r Nybegynder
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..
Avatar billede arne_v Ekspert
14. februar 2004 - 22:29 #29
Jep.

arne_v@mail.danbbs.dk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester