Uite aici un schelet, l-am folosit mai demult pt. ceva asemanator.
Din pacate partea cu conectarea la baza de date nu o mai am :-(
Silviu
======================= sm.cpp =========================
#include "SQLServer.h"
#include "GenericClient.h"
#include "sockets.h"
#include <vector>
#include <string>
const char * MAIL_FROM_USER = "[EMAIL PROTECTED]";
const char * MAIL_FROM_DISPLAY_USER = "Support Team";
const char * SMTP_SERVER = "aries";
const char * P_FNAME = "%%%FNAME%%%";
const char * P_LNAME = "%%%LNAME%%%";
const char * P_UNAME = "%%%UNAME%%%";
const char * P_PASS = "%%%PASS%%%";
const char * P_EMAIL = "%%%EMAIL%%%";
const char * DB_SERVER = "aries";
const char * DB_USER = "kdflshgfljshg";
const char * DB_PASS = "ljdgkfld";
const char * DB_DATABASE = "dbase";
char * mail_template;
struct user
{
char * fname;
char * lname;
char * email;
char * uname;
char * pass;
};
using namespace std;
void ReadMailFile()
{
FILE * f;
f = fopen("mail.msg","rb");
fseek( f, 0, SEEK_END);
long size = ftell(f);
mail_template = (char *) calloc(1, size + 3);
fseek( f, 0, SEEK_SET);
fread( mail_template, size, 1, f);
fclose(f);
}
CSQLServer * sql_server;
void Connect()
{
sql_server = new CSQLServer(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
if (sql_server -> Connect ())
{
printf("error on connect ! \n");
exit(0);
}
}
void GetUsers(vector<user> &v)
{
v.erase(v.begin(),v.end());
if (sql_server -> Query ("select FirstName, LastName, Email, USER, PASS
from tbl_players where selected=1;"))
{
printf(" querry error ! ");
exit(0);
return;
}
if ( sql_server -> IsAResultStored ( ) )
{
int rows = sql_server ->GetNumRows();
for (int i = 0; i< rows; i++)
{
user * u = new user;
string *s;
s = sql_server -> GetElementAt(i,0);
u->fname = strdup (s -> c_str());
delete s;
s = sql_server -> GetElementAt(i,1);
u->lname = strdup (s -> c_str());
delete s;
s = sql_server -> GetElementAt(i,2);
u->email = strdup (s -> c_str());
delete s;
s = sql_server -> GetElementAt(i,3);
u->uname = strdup (s -> c_str());
delete s;
s = sql_server -> GetElementAt(i,4);
u->pass = strdup (s -> c_str());
delete s;
v.push_back(*u);
}
}
return ;
}
int GetSMTPReply ( CGenericClient * client)
{
char buff[1000];
int size = 999;
size = recv(client -> m_socket, buff, size, 0);
if (size == 0)
return 777;
else
buff[size] = '\0';
buff[3] = '\0';
return atoi (buff);
}
int SendSMTPData ( CGenericClient * client, const char * data)
{
int size = strlen(data);
send(client -> m_socket, data, size, 0);
return 0;
}
void SendRawMail(const user u, const char * to, const char * from, const
char * data)
{
CGenericClient client;
char buffer[1000];
client.InitSocket(SMTP_SERVER,25);
if (GetSMTPReply (&client) > 400)
return;
sprintf(buffer,"MAIL FROM: %s\r\n", MAIL_FROM_USER);
SendSMTPData(&client,buffer);
if (GetSMTPReply (&client) > 400)
return;
sprintf(buffer,"RCPT TO: %s\r\n", u.email);
SendSMTPData(&client,buffer);
if (GetSMTPReply (&client) > 400)
return;
SendSMTPData(&client,"DATA\r\n");
if (GetSMTPReply (&client) > 400)
return;
sprintf(buffer,"From: %s <%s>\r\n", MAIL_FROM_DISPLAY_USER,
MAIL_FROM_USER);
SendSMTPData(&client,buffer);
sprintf(buffer,"To: %s %s <%s>\r\n", u.fname, u.lname, u.email);
SendSMTPData(&client,buffer);
sprintf(buffer,"Reply-To: %s\r\n", MAIL_FROM_USER);
SendSMTPData(&client,buffer);
SendSMTPData(&client,data);
SendSMTPData(&client,".\r\n");
if (GetSMTPReply (&client) > 400)
return;
SendSMTPData(&client,"QUIT\n");
if (GetSMTPReply (&client) > 400)
return;
}
void Replace(const char * pattern, const char *replacement, char * & s)
{
char * pos;
char * pos2;
pos = strstr( s, pattern);
if (pos == NULL)
return;
pos2 = pos + strlen(pattern);
char * new_string;
new_string = (char*) calloc(1, strlen(s) - strlen(pattern) +
strlen(replacement) + 1);
s[pos - s] = 0;
sprintf(new_string,"%s%s%s",s, replacement, pos2);
s[pos - s] = ' ';
free(s);
s = new_string;
}
void SendMailToUser(const user u)
{
char * dup = strdup (mail_template);
Replace(P_FNAME, u.fname, dup);
Replace(P_LNAME, u.lname, dup);
Replace(P_EMAIL, u.email, dup);
Replace(P_UNAME, u.uname, dup);
Replace(P_PASS , u.pass , dup);
SendRawMail(u, u.email, MAIL_FROM_USER, dup);
printf("sent message to : %s\n",u.email);
free(dup);
}
void SendMailToAllUsers(const vector<user> &v)
{
for (unsigned int i = 0; i<v.size(); i++)
{
SendMailToUser(v[i]);
}
}
int main()
{
vector<user> selected_users;
printf("reading mail file ...\n");
ReadMailFile();
printf("connecting ...\n");
Connect();
printf("getting users ...\n");
GetUsers(selected_users);
printf("sending mail to all users ...\n");
SendMailToAllUsers(selected_users);
delete sql_server;
free(mail_template);
return 0;
}
======================= mail.msg =========================
MIME-Version: 1.0
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
Subject: Your Application
<HTML><BODY>
This is a mail for %%%FNAME%%% %%%LNAME%%% .<br>
You have been selected as .......
You can log with : <br>
User : %%%UNAME%%% <br>
Pass : %%%PASS%%% <br>
<br>
Have a nice play !
<!-- <IMG SRC="javascript:window.open('www.yoursite.com');"> -->
</BODY></HTML>
======================= done =========================
---
Send e-mail to '[EMAIL PROTECTED]' with 'unsubscribe rlug' to
unsubscribe from this list.