summaryrefslogtreecommitdiff
path: root/noncore/net/mail/mailwrapper.h
blob: 02fe4b707c4be804a83617407de736bf8d5cb210 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#ifndef MAILWRAPPER_H
#define MAILWRAPPER_H

#include <qpe/applnk.h>

#include <libetpan/mailmime.h>
#include <libetpan/mailimf.h>
#include <libetpan/mailsmtp.h>
#include <libetpan/mailstorage.h>
#include <libetpan/maildriver.h>
#include <qbitarray.h>
#include <qdatetime.h>

#include "settings.h"

class Attachment
{
public:
    Attachment( DocLnk lnk ); 
    virtual ~Attachment(){}
    const QString getFileName()const{ return doc.file(); }
    const QString getName()const{ return doc.name(); }
    const QString getMimeType()const{ return doc.type(); }
    const QPixmap getPixmap()const{ return doc.pixmap(); }
    const int getSize()const { return size; }
    DocLnk  getDocLnk() { return doc; }
    
protected:
    DocLnk doc;
    int size;

};

class Mail
{
public:
    Mail();
    /* Possible that this destructor must not be declared virtual
     * 'cause it seems that it will never have some child classes.
     * in this case this object will not get a virtual table -> memory and
     * speed will be a little bit better?
     */
    virtual ~Mail(){}
    void addAttachment( Attachment *att ) { attList.append( att ); }
    const QList<Attachment>& getAttachments()const { return attList; }
    void removeAttachment( Attachment *att ) { attList.remove( att ); } 
    const QString&getName()const { return name; }
    void setName( QString s ) { name = s; }
    const QString&getMail()const{ return mail; }
    void setMail( const QString&s ) { mail = s; }
    const QString&getTo()const{ return to; }
    void setTo( const QString&s ) { to = s; }
    const QString&getCC()const{ return cc; }
    void setCC( const QString&s ) { cc = s; }
    const QString&getBCC()const { return bcc; }
    void setBCC( const QString&s ) { bcc = s; }
    const QString&getMessage()const { return message; }
    void setMessage( const QString&s ) { message = s; }
    const QString&getSubject()const { return subject; }
    void setSubject( const QString&s ) { subject = s; }
    const QString&getReply()const{ return reply; }
    void setReply( const QString&a ) { reply = a; }

private:
    QList<Attachment> attList;
    QString name, mail, to, cc, bcc, reply, subject, message;
};

class Folder : public QObject
{
    Q_OBJECT

public:
    Folder( const QString&init_name,const QString&sep );
    const QString&getDisplayName()const { return nameDisplay; }
    const QString&getName()const { return name; }
    virtual bool may_select()const{return true;};    
    const QString&Separator()const;

protected:
    QString nameDisplay, name, separator;
    
};

class IMAPFolder : public Folder
{
    public:
        IMAPFolder(const QString&name, const QString&sep, bool select=true,const QString&prefix="" );
        virtual bool may_select()const{return m_MaySelect;}
    private:
		static QString decodeFolderName( const QString &name );
        bool m_MaySelect;

};

class MailWrapper : public QObject
{
    Q_OBJECT

public:
    MailWrapper( Settings *s ); 
    void sendMail( Mail mail );

private:
    mailimf_mailbox *newMailbox(const QString&name,const QString&mail );
    mailimf_address_list *parseAddresses(const QString&addr );
    mailimf_fields *createImfFields( Mail *mail );
    mailmime *buildTxtPart( QString str );
    mailmime *buildFilePart( QString filename, QString mimetype );
    void addFileParts( mailmime *message, QList<Attachment> files );
    mailmime *createMimeMail( Mail *mail );
    void smtpSend( mailmime *mail );
    mailimf_field *getField( mailimf_fields *fields, int type );
    clist *createRcptList( mailimf_fields *fields );
    char *getFrom( mailmime *mail );
    SMTPaccount *getAccount( QString from );
    void writeToFile( QString file, mailmime *mail );
    void readFromFile( QString file, char **data, size_t *size );
    static QString mailsmtpError( int err );
    static QString getTmpFile();

    Settings *settings;
        
};

#endif