/* libzzsock
 *
 * This program is distributed under the GNU General Public License, version 2.
 * A copy of this license is included with this source.
 *
 * Copyright 2000-2006, Toni Thomsson <toni@tonjac.org> 
*/

#ifndef zz_mail_h
#define zz_mail_h

#include <zz_export.h>

#ifdef _WIN32
    #pragma warning(disable: 4786) // Debugsymbols truncated
    #pragma warning(disable: 4251) // DLL-interface missing for private map members
#endif

#include <zz_string.h>
#include <zz_socket.h>
#include <map>

/*
    Description:
    Enkelt SMTP mail

    Author: 
    Toni Thomsson, toni@tonjac.org

    Library:
    libzzsock.a (HPUX) libzzsock.lib (win32)

    Platform:
    HPUX, win32
*/
class ZZ_API CzzMail
{
public:

    /*
        Description:
        Skapar ett mail

        Throws:
        CzzException
    */
    CzzMail( const char* host,                  // IN, mail host
                const char* sender,             // IN, avsändare
                const char* recipient,          // IN, mottagare
                const char* subject,            // IN, rubrik
                const char* sendername = "",    // IN, avsändare (klartext)
                const char* recipientname = "", // IN, mottagare (klartext)
                const char* replyto = "",       // IN, svarsmottagare
                const char* replytoname = "",   // IN, svarsmottagare (klartext)
                const char* msgid = "" );       // IN, meddelande id

    virtual ~CzzMail();

    /*
        Description:
        Lägger till en textrad till meddelandet
    */
    void addMessageRow( const CzzString& row /// IN, textrad
                        );

    /*
        Description:
        Kopplar en fil till meddelandet

        Remarks:
        EJ IMPLEMENTERAD, FUNGERAR EJ !
    */
    void addAttachment( const CzzString& file // IN, sökväg till fil
                        ) {};

    /*
        Description:
        Sänder meddelandet

        Throws:
        CzzException
    */
    void sendMessage( void );

protected:

    void checkReply( const char* replycode );
    void send( const char* buff );
    
    CzzString m_Host;
    CzzString m_Sender;
    CzzString m_SenderName;
    CzzString m_Recipient;
    CzzString m_RecipientName;
    CzzString m_ReplyTo;
    CzzString m_ReplyToName;
    CzzString m_MessageId;
    CzzString m_Subject;
    CzzSocket* m_Socket;

private:
    map<int, CzzString > m_MessageRows;

};

#endif // zz_mail_h