You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/kmail/kmsender_p.h

152 lines
3.6 KiB

/* KMail Mail Sender
*
* Author: Stefan Taferner <taferner@alpin.or.at>
*/
#ifndef __KMAIL_SENDER_P_H__
#define __KMAIL_SENDER_P_H__
#include "kmsender.h"
#include <qstring.h>
#include <qstringlist.h>
#include <qobject.h>
#include <kio/global.h>
#include <kdeversion.h>
class KProcess;
namespace KIO {
class Job;
class TransferJob;
class Slave;
}
class KMSendProc: public QObject
{
Q_OBJECT
public:
KMSendProc(KMSender*);
virtual ~KMSendProc() {}
/** Initialize sending of one or more messages. */
void start() { emit started( doStart() ); }
/** Send given message. May return before message is sent. */
bool send( const QString & sender, const QStringList & to, const QStringList & cc, const QStringList & bcc, const QByteArray & message ) {
reset(); return doSend( sender, to, cc, bcc, message );
}
/** Cleanup after sending messages. */
void finish() { doFinish(); deleteLater(); }
/** Abort sending the current message. Sets mSending to false */
virtual void abort() = 0;
/** Returns TRUE if send was successful, and FALSE otherwise.
Returns FALSE if sending is still in progress. */
bool sendOk() const { return mSendOk; }
/** Returns error message of last call of failed(). */
QString lastErrorMessage() const { return mLastErrorMessage; }
signals:
/** Emitted when the current message is sent or an error occurred. */
void idle();
/** Emitted when the initialization sequence has finished */
void started(bool);
protected:
/** Called to signal a transmission error. The sender then
calls finish() and terminates sending of messages.
Sets mSending to FALSE. */
void failed(const QString &msg);
/** Informs the user about what is going on. */
void statusMsg(const QString&);
private:
void reset();
private:
virtual void doFinish() = 0;
virtual bool doSend( const QString & sender, const QStringList & to, const QStringList & cc, const QStringList & bcc, const QByteArray & message ) = 0;
virtual bool doStart() = 0;
protected:
KMSender* mSender;
QString mLastErrorMessage;
bool mSendOk : 1;
bool mSending : 1;
};
//-----------------------------------------------------------------------------
class KMSendSendmail: public KMSendProc
{
Q_OBJECT
public:
KMSendSendmail(KMSender*);
~KMSendSendmail();
void start();
void abort();
protected slots:
void receivedStderr(KProcess*,char*,int);
void wroteStdin(KProcess*);
void sendmailExited(KProcess*);
private:
/** implemented from KMSendProc */
void doFinish();
/** implemented from KMSendProc */
bool doSend( const QString & sender, const QStringList & to, const QStringList & cc, const QStringList & bcc, const QByteArray & message );
/** implemented from KMSendProc */
bool doStart();
private:
QByteArray mMsgStr;
char* mMsgPos;
int mMsgRest;
KProcess* mMailerProc;
};
//-----------------------------------------------------------------------------
class KMSendSMTP : public KMSendProc
{
Q_OBJECT
public:
KMSendSMTP(KMSender *sender);
~KMSendSMTP();
void abort();
private slots:
void dataReq(KIO::Job *, QByteArray &);
void result(KIO::Job *);
void slaveError(KIO::Slave *, int, const QString &);
private:
/** implemented from KMSendProc */
void doFinish();
/** implemented from KMSendProc */
bool doSend( const QString & sender, const QStringList & to, const QStringList & cc, const QStringList & bcc, const QByteArray & message );
/** implemented from KMSendProc */
bool doStart() { return true; }
void cleanup();
private:
QByteArray mMessage;
uint mMessageLength;
uint mMessageOffset;
bool mInProcess;
KIO::TransferJob *mJob;
KIO::Slave *mSlave;
};
#endif /* __KMAIL_SENDER_P_H__ */