PDA

Visualizza la versione completa : invio email codice C aiuto


dogmatico89
24-06-2011, 20:56
ciao a tutti.... da un po di settimane che mi sono messo a leggere guide su guide su come mandare una email (con o senza allegato) tramite un programma .exe fatto in codice C.... problema.... non ci capito una mazza di nulla... :dh: le poche cose che ho capito sono che devo configurare una socket ma nn ho idea da dove cominciare...per questo mi rivolgo a voi....
vorrei fare un programma C che invia una email in automantico a un indirizzo di posta elettronica di gmail.... qualcuno sa come fare????

P.s sto usando windows come Sistema operativo

oregon
25-06-2011, 00:43
Beh, non difficile ma bisogna vedere cosa non hai capito del testo che hai letto.

Cos come l'hai detto, il problema troppo generico. L'unica soluzione sarebbe fornirti il programma completo. Ma dato che non quello che vuoi, devi fare una domanda pi precisa circa la parte del codice su cui hai dubbi.

dogmatico89
25-06-2011, 21:38
alla fine ho trovato un programma gia fatto.... l'ho provato ma nn mi invia nulla... in cosa sbaglio???

ecco il codice:

#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <windows.h>
#include <unistd.h>

typedef char stringa[500];

SOCKET conn;
FILE *fmail;
int lun, err=0;
int time=0;
char buf[1500],end[7];
char input;
char Mittente[50]="xxxxxxxxxxxxx";
char Destinatario[50]="xxxxxxxxxx";
char Oggetto[50]="xxxxxxxx";
SOCKADDR_IN conn_addr;
WSADATA data;
WORD versione;
LPHOSTENT host;



void RispostaServer();
void inviomail();

int main(int argc,char **argv)
{

printf("\nNome/E-mail Mittente: %s",Mittente );
printf("\nE-mail Destinatario: %s", Destinatario);
printf("\nOggetto: %s", Oggetto);

printf ("Invio E-mail in corso...\n");
inviomail();
Sleep(200);
WSACleanup();
system("cls");

printf("\nE-Mail inviata");
Sleep(2500);
return 0;
}

void inviomail()
{
fmail=fopen("prova.txt","r");
if (fmail==NULL)
{
printf("Errore file \"prova.txt\"");
}

versione=MAKEWORD(2,0);
WSAStartup(versione,&data);

conn=socket(PF_INET,SOCK_STREAM,0);
conn_addr.sin_family=PF_INET;
conn_addr.sin_port=htons(25);

host=gethostbyname ("esmtp.gmail.com"); //perche uso gmail per la posta
if (host==NULL)
{
err=WSAGetLastError();
printf ("Errore con l'Host\t%d",err);
}

conn_addr.sin_addr = *((LPIN_ADDR)*host->h_addr_list);
lun=sizeof(struct sockaddr);

err=connect(conn,(struct sockaddr*)&conn_addr,lun);
if (err!=0)
{
err=WSAGetLastError();
printf("Errore della Socket\t%d",err);
}

RispostaServer();

sprintf(buf,"helo inviamail\nmail from:<____________>\nrcptto:<%s>\ndata\n",Destinatario);
send(conn, buf, strlen(buf), 0);

RispostaServer();

sprintf(buf, "From: %s\n",Mittente);
send(conn, buf, strlen(buf), 0);

sprintf(buf, "To: %s\n",Destinatario);
send(conn, buf, strlen(buf), 0);

sprintf(buf, "Subject: %s\n",Oggetto);
send(conn, buf, strlen(buf), 0);


while (feof(fmail)==0){
fscanf (fmail,"%c",&input);
send (conn,&input,1,0);
}

sprintf(buf, "\n.\n");
printf(buf);
send(conn, buf, strlen(buf), 0);

fclose(fmail);


sprintf(end,"quit\n");
send(conn,end,strlen(end),0);

RispostaServer();


closesocket(conn);

}


void RispostaServer(){

char mess[1000];
int n=0;
n=recv(conn,mess,200,0);
mess[n]=0;
}

oltre al fatto che nn va inserendo i miei dati nei vari campi non so cosa deve andare inserito in questo campo particolare....

sprintf(buf,"helo inviamail\nmail from:<____________>\nrcptto:<%s>\ndata\n",Destinatario);

qualcuno sa cosa c devo mettere???

oregon
25-06-2011, 22:54
Ci va il mittente ...

MItaly
25-06-2011, 23:14
Se non erro l'SMTP di Gmail va solo su SSL, il che complica abbastanza la questione...

oregon
25-06-2011, 23:18
Originariamente inviato da MItaly
Se non erro l'SMTP di Gmail va solo su SSL, il che complica abbastanza la questione...

Esatto ... e ci sono tante altre cose a complicare la questione ...

alka
27-06-2011, 11:11
Invito a leggere il Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Qui non si sviluppa codice pronto all'uso per risolvere un problema, n si analizza codice reperito altrove per identificarne gli errori e segnalarne la natura e la conseguente risoluzione, ma si da semplicemente una mano a coloro che, essendosi adeguatamente documentati, hanno errori o problemi specifici da risolvere nella scrittura del proprio codice.

Loading