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.

Raspunde prin e-mail lui