00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MAIL_H
00019 #define MAIL_H
00020
00021 class Mail;
00022
00023
00024 #include <iostream>
00025
00026
00027 #include <QObject>
00028 #include <QStringList>
00029 #include <QRegExp>
00030 #include <QTextCodec>
00031 #include <QDomElement>
00032 #include <QPointer>
00033
00034
00035 #include <kmime/kmime_codecs.h>
00036 #include <kmime/kmime_headers.h>
00037 #include <KDateTime>
00038
00039
00040 #include "maillist.h"
00041 #include "account.h"
00042
00043 using namespace std;
00044
00045
00046 #define HEADER_SEPARATOR "ยง$%&"
00047
00051 class Mail : public QObject
00052 {
00053
00054 Q_OBJECT
00055
00056 public:
00057
00058
00067 Mail( long number, const QString& unid, bool isNew, QPointer<Account> account, QObject* parent );
00068
00073 Mail( const Mail& mail );
00074
00078 ~Mail();
00079
00084 Mail& operator=( const Mail& other );
00085
00090 void setSize( long size );
00091
00096 void setNumber( int number );
00097
00101 void print() const;
00102
00107 QString getSubject() const;
00108
00113 QString getUNID() const;
00114
00119 long getSize() const;
00120
00125 int getNumber() const;
00126
00131 void setNew( bool isnew );
00132
00138 bool isNew() const;
00139
00145 void setHeader( const QStringList& header );
00146
00151 QStringList getHeader() const;
00152
00157 void setSubject( const QString& subject );
00158
00163 void setFrom( const QString& from );
00164
00169 void setTo( const QString& to );
00170
00175 void setDate( const QString& date );
00176
00180 KDateTime getDateTime() const;
00181
00186 void setContent( const QString& content );
00187
00192 QString getContent() const;
00193
00198 QPointer<Account> getAccount() const;
00199
00204 QString getFrom() const;
00205
00210 QString getTo() const;
00211
00215 QString getSizeSuffix() const;
00216
00230 FilterAction_Type applyHeaderFilter( HeaderFilter* filter, QString account, QString& mailbox, FilterLog* log = NULL );
00231
00238 void save( QDomDocument& doc, QDomElement& parent );
00239
00244 bool isMarkedByFilter() const;
00245
00257 QStringList decodeMailBody( const QStringList& body, bool preferHTML ) const;
00258
00264 QString getBoundary() const;
00265
00271 QString getCharsetFromHeader() const;
00272
00278 QString getTransferEncodingFromHeader() const;
00279
00286 void writeToMoveLog( FilterLog* log, QString account, QString mailbox );
00287
00293 void writeToDeleteLog( FilterLog* log, QString account );
00294
00298 void setMarkAtNextViewRefresh();
00299
00307 int compare( const Mail& other, MailSort_Type property );
00308
00314 QString getAccountName() const;
00315
00316
00317 private:
00318
00322 QString unid;
00323
00327 QString subject;
00328
00332 QStringList header;
00333
00337 long size;
00338
00342 int number;
00343
00347 bool _new;
00348
00352 QString from;
00353
00357 QString to;
00358
00362 KDateTime sendDate;
00363
00367 QString contentType;
00368
00373 bool markedByFilter;
00374
00378 QPointer<Account> acc;
00379
00383 QString accountName;
00384
00385
00386 protected:
00387
00391 void init();
00392
00404 QString scanHeader( const QString& item ) const;
00405
00418 QString scanBodyPart( const QStringList& part, const QString& item ) const;
00419
00424 QString decodeRfc2047( const QString& text ) const;
00425
00432 QString getCharset( const QStringList& text ) const;
00433
00440 QString getTransferEncoding( const QStringList& text ) const;
00441
00442 };
00443
00444 #endif // MAIL_H