kmsender.h
00001
00002
00003
00004
00005 #ifndef kmsender_h
00006 #define kmsender_h
00007 #include <qcstring.h>
00008 #include <qstring.h>
00009 #include <qstringlist.h>
00010 #include <qobject.h>
00011 #include <kio/global.h>
00012 #include <kdeversion.h>
00013
00014 class KMMessage;
00015 class KMFolder;
00016 class KMFolderMgr;
00017 class KConfig;
00018 class KProcess;
00019 class KMSendProc;
00020 class QStrList;
00021 class KMTransportInfo;
00022 class KMPrecommand;
00023
00024 namespace KIO {
00025 class Job;
00026 class TransferJob;
00027 class Slave;
00028 }
00029
00030 namespace KMime {
00031 namespace Types {
00032 class AddrSpec;
00033 typedef QValueList<AddrSpec> AddrSpecList;
00034 }
00035 }
00036
00037 class KMSender: public QObject
00038 {
00039 Q_OBJECT
00040 friend class KMSendProc;
00041
00042 public:
00043 KMSender();
00044 virtual ~KMSender();
00045
00053 virtual bool send(KMMessage* msg, short sendNow=-1);
00054
00056 virtual bool sendQueued();
00057
00059 bool sending(void) const { return mSendInProgress; }
00060
00063 bool sendImmediate(void) const { return mSendImmediate; }
00064 virtual void setSendImmediate(bool);
00065
00068 bool sendQuotedPrintable(void) const { return mSendQuotedPrintable; }
00069 virtual void setSendQuotedPrintable(bool);
00070
00072 KMTransportInfo * transportInfo() { return mTransportInfo; }
00073
00075 virtual void readConfig(void);
00076
00078 virtual void writeConfig(bool withSync=TRUE);
00079
00081 void setStatusMsg(const QString&);
00082
00084 void setStatusByLink(const KMMessage *aMsg);
00085
00087 void emitProgressInfo( int currentFileProgress );
00088
00089 signals:
00091 void statusMsg(const QString&);
00092
00093 protected slots:
00095 virtual void slotPrecommandFinished(bool);
00096
00097 virtual void slotIdle();
00098
00100 virtual void slotAbortSend();
00101
00103 virtual void sendProcStarted(bool success);
00104
00106 void outboxMsgAdded(int idx);
00107
00108 protected:
00110 virtual void doSendMsg();
00111
00113 virtual void doSendMsgAux();
00114
00116 virtual void cleanup(void);
00117
00121 virtual bool settingsOk(void) const;
00122
00125 virtual KMSendProc* createSendProcFromString(QString transport);
00126
00127 private:
00128 bool mSendImmediate;
00129 bool mSendQuotedPrintable;
00130 KMTransportInfo *mTransportInfo;
00131 KMPrecommand *mPrecommand;
00132
00133 bool mSentOk, mSendAborted;
00134 QString mErrorMsg;
00135 KMSendProc *mSendProc;
00136 QString mMethodStr;
00137 bool mSendProcStarted;
00138 bool mSendInProgress;
00139 KMMessage * mCurrentMsg;
00140 int mSentMessages, mTotalMessages;
00141 int mSentBytes, mTotalBytes;
00142 int mFailedMessages;
00143 };
00144
00145
00146
00147 class KMSendProc: public QObject
00148 {
00149 Q_OBJECT
00150
00151 public:
00152 KMSendProc(KMSender*);
00153 virtual ~KMSendProc() {}
00154
00156 virtual void start(void);
00157
00159 virtual void preSendInit(void);
00160
00162 virtual bool send(KMMessage* msg) = 0;
00163
00165 virtual bool finish(bool destructive);
00166
00168 virtual void abort() = 0;
00169
00172 bool sendOk(void) const { return mSendOk; }
00173
00175 bool sending(void) const { return mSending; }
00176
00178 QString message(void) const { return mMsg; }
00179
00180 signals:
00182 void idle();
00183
00185 void started(bool);
00186
00187
00188 protected:
00192 virtual void failed(const QString &msg);
00193
00194 #if !KDE_IS_VERSION( 3, 1, 90 ) // dotstuffing and LF->CRLF is now
00195
00197 virtual QCString prepareStr(const QCString &str, bool toCRLF=FALSE,
00198 bool noSingleDot=TRUE);
00199 #endif
00200
00202 virtual void statusMsg(const QString&);
00203
00208 virtual bool addRecipients(const KMime::Types::AddrSpecList & aRecpList);
00209
00215 virtual bool addOneRecipient(const QString& aRecipient) = 0;
00216
00217 protected:
00218 bool mSendOk, mSending;
00219 QString mMsg;
00220 KMSender* mSender;
00221 };
00222
00223
00224
00225 class KMSendSendmail: public KMSendProc
00226 {
00227 Q_OBJECT
00228 public:
00229 KMSendSendmail(KMSender*);
00230 virtual ~KMSendSendmail();
00231 virtual void start(void);
00232 virtual bool send(KMMessage* msg);
00233 virtual bool finish(bool destructive);
00234 virtual void abort();
00235
00236 protected slots:
00237 void receivedStderr(KProcess*,char*,int);
00238 void wroteStdin(KProcess*);
00239 void sendmailExited(KProcess*);
00240
00241 protected:
00242 virtual bool addOneRecipient(const QString& aRecipient);
00243
00244 QCString mMsgStr;
00245 char* mMsgPos;
00246 int mMsgRest;
00247 KProcess* mMailerProc;
00248 };
00249
00250
00251 class KMSendSMTP : public KMSendProc
00252 {
00253 Q_OBJECT
00254 public:
00255 KMSendSMTP(KMSender *sender);
00256 ~KMSendSMTP();
00257
00258 virtual bool send(KMMessage *);
00259 virtual void abort();
00260 virtual bool finish(bool);
00261
00262 protected:
00263 virtual bool addOneRecipient(const QString& aRecipient);
00264
00265 private slots:
00266 void dataReq(KIO::Job *, QByteArray &);
00267 void result(KIO::Job *);
00268 void slaveError(KIO::Slave *, int, const QString &);
00269
00270 private:
00271 QString mQuery;
00272 QString mQueryField;
00273 QCString mMessage;
00274 uint mMessageLength;
00275 uint mMessageOffset;
00276
00277 bool mInProcess;
00278
00279 KIO::TransferJob *mJob;
00280 KIO::Slave *mSlave;
00281 };
00282
00283 #endif
This file is part of the documentation for kmail Library Version 3.2.2.