summaryrefslogtreecommitdiff
authorharlekin <harlekin>2003-12-08 16:57:54 (UTC)
committer harlekin <harlekin>2003-12-08 16:57:54 (UTC)
commit57bc0542cae3d106194c9318612fde304e8acfa7 (patch) (side-by-side diff)
treee0cb233b51302ad2401534ee221cd16fc99d4817
parente7b8b190e8c3081d20e33c512224f9a5b5baa20c (diff)
downloadopie-57bc0542cae3d106194c9318612fde304e8acfa7.zip
opie-57bc0542cae3d106194c9318612fde304e8acfa7.tar.gz
opie-57bc0542cae3d106194c9318612fde304e8acfa7.tar.bz2
no idea how to comment that change
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.cpp2
-rw-r--r--noncore/net/mail/libmailwrapper/mailwrapper.h12
-rw-r--r--noncore/net/mail/mail.pro1
-rw-r--r--noncore/net/mail/mailwrapper.cpp2
-rw-r--r--noncore/net/mail/mailwrapper.h12
5 files changed, 14 insertions, 15 deletions
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.cpp b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
index 17bed65..13a3fd9 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.cpp
@@ -1,269 +1,269 @@
#include <qfileinfo.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <qdir.h>
#include <qtextstream.h>
#include "mailwrapper.h"
#include "logindialog.h"
-#include "mail.h"
+//#include "mail.h"
#include "defines.h"
Attachment::Attachment( DocLnk lnk )
{
doc = lnk;
size = QFileInfo( doc.file() ).size();
}
Folder::Folder(const QString&tmp_name )
{
name = tmp_name;
nameDisplay = name;
for ( int pos = nameDisplay.find( '&' ); pos != -1;
pos = nameDisplay.find( '&' ) ) {
int end = nameDisplay.find( '-' );
if ( end == -1 || end <= pos ) break;
QString str64 = nameDisplay.mid( pos + 1, end - pos - 1 );
// TODO: do real base64 decoding here !
if ( str64.compare( "APw" ) == 0 ) {
nameDisplay = nameDisplay.replace( pos, end - pos + 1, "ue" );
} else if ( str64.compare( "APY" ) == 0 ) {
nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" );
}
}
qDebug( "folder " + name + " - displayed as " + nameDisplay );
}
MailWrapper::MailWrapper( Settings *s )
: QObject()
{
settings = s;
}
QString MailWrapper::mailsmtpError( int errnum )
{
switch ( errnum ) {
case MAILSMTP_NO_ERROR:
return tr( "No error" );
case MAILSMTP_ERROR_UNEXPECTED_CODE:
return tr( "Unexpected error code" );
case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
return tr( "Service not available" );
case MAILSMTP_ERROR_STREAM:
return tr( "Stream error" );
case MAILSMTP_ERROR_HOSTNAME:
return tr( "gethostname() failed" );
case MAILSMTP_ERROR_NOT_IMPLEMENTED:
return tr( "Not implemented" );
case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
return tr( "Error, action not taken" );
case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
return tr( "Data exceeds storage allocation" );
case MAILSMTP_ERROR_IN_PROCESSING:
return tr( "Error in processing" );
// case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
// return tr( "Insufficient system storage" );
case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
return tr( "Mailbox unavailable" );
case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
return tr( "Mailbox name not allowed" );
case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
return tr( "Bad command sequence" );
case MAILSMTP_ERROR_USER_NOT_LOCAL:
return tr( "User not local" );
case MAILSMTP_ERROR_TRANSACTION_FAILED:
return tr( "Transaction failed" );
case MAILSMTP_ERROR_MEMORY:
return tr( "Memory error" );
case MAILSMTP_ERROR_CONNECTION_REFUSED:
return tr( "Connection refused" );
default:
return tr( "Unknown error code" );
}
}
mailimf_mailbox *MailWrapper::newMailbox(const QString&name, const QString&mail )
{
return mailimf_mailbox_new( strdup( name.latin1() ),
strdup( mail.latin1() ) );
}
mailimf_address_list *MailWrapper::parseAddresses(const QString&addr )
{
mailimf_address_list *addresses;
if ( addr.isEmpty() ) return NULL;
addresses = mailimf_address_list_new_empty();
QStringList list = QStringList::split( ',', addr );
QStringList::Iterator it;
for ( it = list.begin(); it != list.end(); it++ ) {
char *str = strdup( (*it).latin1() );
int err = mailimf_address_list_add_parse( addresses, str );
if ( err != MAILIMF_NO_ERROR ) {
qDebug( "Error parsing" );
qDebug( *it );
free( str );
} else {
qDebug( "Parse success! :)" );
}
}
return addresses;
}
mailimf_fields *MailWrapper::createImfFields( Mail *mail )
{
mailimf_fields *fields;
mailimf_field *xmailer;
mailimf_mailbox *sender, *fromBox;
mailimf_mailbox_list *from;
mailimf_address_list *to, *cc, *bcc, *reply;
char *subject = strdup( mail->getSubject().latin1() );
int err;
sender = newMailbox( mail->getName(), mail->getMail() );
if ( sender == NULL ) goto err_free;
fromBox = newMailbox( mail->getName(), mail->getMail() );
if ( fromBox == NULL ) goto err_free_sender;
from = mailimf_mailbox_list_new_empty();
if ( from == NULL ) goto err_free_fromBox;
err = mailimf_mailbox_list_add( from, fromBox );
if ( err != MAILIMF_NO_ERROR ) goto err_free_from;
to = parseAddresses( mail->getTo() );
if ( to == NULL ) goto err_free_from;
cc = parseAddresses( mail->getCC() );
bcc = parseAddresses( mail->getBCC() );
reply = parseAddresses( mail->getReply() );
fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc,
NULL, NULL, subject );
if ( fields == NULL ) goto err_free_reply;
xmailer = mailimf_field_new_custom( strdup( "User-Agent" ),
strdup( USER_AGENT ) );
if ( xmailer == NULL ) goto err_free_fields;
err = mailimf_fields_add( fields, xmailer );
if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer;
return fields; // Success :)
err_free_xmailer:
mailimf_field_free( xmailer );
err_free_fields:
mailimf_fields_free( fields );
err_free_reply:
mailimf_address_list_free( reply );
mailimf_address_list_free( bcc );
mailimf_address_list_free( cc );
mailimf_address_list_free( to );
err_free_from:
mailimf_mailbox_list_free( from );
err_free_fromBox:
mailimf_mailbox_free( fromBox );
err_free_sender:
mailimf_mailbox_free( sender );
err_free:
free( subject );
qDebug( "createImfFields - error" );
return NULL; // Error :(
}
mailmime *MailWrapper::buildTxtPart( QString str )
{
mailmime *txtPart;
mailmime_fields *fields;
mailmime_content *content;
mailmime_parameter *param;
char *txt = strdup( str.latin1() );
int err;
param = mailmime_parameter_new( strdup( "charset" ),
strdup( "iso-8859-1" ) );
if ( param == NULL ) goto err_free;
content = mailmime_content_new_with_str( "text/plain" );
if ( content == NULL ) goto err_free_param;
err = clist_append( content->parameters, param );
if ( err != MAILIMF_NO_ERROR ) goto err_free_content;
fields = mailmime_fields_new_encoding( MAILMIME_MECHANISM_8BIT );
if ( fields == NULL ) goto err_free_content;
txtPart = mailmime_new_empty( content, fields );
if ( txtPart == NULL ) goto err_free_fields;
err = mailmime_set_body_text( txtPart, txt, strlen( txt ) );
if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart;
return txtPart; // Success :)
err_free_txtPart:
mailmime_free( txtPart );
err_free_fields:
mailmime_fields_free( fields );
err_free_content:
mailmime_content_free( content );
err_free_param:
mailmime_parameter_free( param );
err_free:
free( txt );
qDebug( "buildTxtPart - error" );
return NULL; // Error :(
}
mailmime *MailWrapper::buildFilePart( QString filename, QString mimetype )
{
mailmime * filePart;
mailmime_fields * fields;
mailmime_content * content;
mailmime_parameter * param = NULL;
int err;
int pos = filename.findRev( '/' );
QString tmp = filename.right( filename.length() - ( pos + 1 ) );
char *name = strdup( tmp.latin1() ); // just filename
char *file = strdup( filename.latin1() ); // full name with path
char *mime = strdup( mimetype.latin1() ); // mimetype -e.g. text/plain
fields = mailmime_fields_new_filename(
MAILMIME_DISPOSITION_TYPE_ATTACHMENT, name,
MAILMIME_MECHANISM_BASE64 );
if ( fields == NULL ) goto err_free;
content = mailmime_content_new_with_str( mime );
if ( content == NULL ) goto err_free_fields;
if ( mimetype.compare( "text/plain" ) == 0 ) {
param = mailmime_parameter_new( strdup( "charset" ),
strdup( "iso-8859-1" ) );
if ( param == NULL ) goto err_free_content;
err = clist_append( content->parameters, param );
if ( err != MAILIMF_NO_ERROR ) goto err_free_param;
}
filePart = mailmime_new_empty( content, fields );
if ( filePart == NULL ) goto err_free_param;
err = mailmime_set_body_file( filePart, file );
if ( err != MAILIMF_NO_ERROR ) goto err_free_filePart;
return filePart; // Success :)
diff --git a/noncore/net/mail/libmailwrapper/mailwrapper.h b/noncore/net/mail/libmailwrapper/mailwrapper.h
index 3de28a0..f45eab7 100644
--- a/noncore/net/mail/libmailwrapper/mailwrapper.h
+++ b/noncore/net/mail/libmailwrapper/mailwrapper.h
@@ -1,183 +1,183 @@
#ifndef MAILWRAPPER_H
#define MAILWRAPPER_H
#include <qpe/applnk.h>
-#include <mailmime.h>
-#include <mailimf.h>
-#include <mailsmtp.h>
-#include <mailimap.h>
-#include <mailstorage.h>
-#include <maildriver.h>
+#include <libetpan/mailmime.h>
+#include <libetpan/mailimf.h>
+#include <libetpan/mailsmtp.h>
+#include <libetpan/mailimap.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;
};
#define FLAG_ANSWERED 0
#define FLAG_FLAGGED 1
#define FLAG_DELETED 2
#define FLAG_SEEN 3
#define FLAG_DRAFT 4
#define FLAG_RECENT 5
/* a class to describe mails in a mailbox */
class RecMail
{
public:
RecMail();
virtual ~RecMail(){}
const int getNumber()const{return msg_number;}
void setNumber(int number){msg_number=number;}
const QString&getDate()const{ return date; }
void setDate( const QString&a ) { date = a; }
const QString&getFrom()const{ return from; }
void setFrom( const QString&a ) { from = a; }
const QString&getSubject()const { return subject; }
void setSubject( const QString&s ) { subject = s; }
void setFlags(const QBitArray&flags){msg_flags = flags;}
const QBitArray&getFlags()const{return msg_flags;}
#if 0
void setDate(const QString&dstring);
void setDate(const QDateTime&date){mDate = date;}
QString getDate()const{return mDate.toString();}
#endif
protected:
QString subject,date,from;
int msg_number;
QBitArray msg_flags;
#if 0
QDateTime mDate;
#endif
};
typedef QList<RecMail> Maillist;
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&getDisplayName()const { return nameDisplay; }
const QString&getName()const { return name; }
virtual bool may_select()const{return true;};
private:
QString nameDisplay, name;
};
class IMAPFolder : public Folder
{
public:
IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {}
virtual bool may_select()const{return m_MaySelect;}
private:
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;
};
class IMAPwrapper : public QObject
{
Q_OBJECT
public:
IMAPwrapper( IMAPaccount *a );
QList<IMAPFolder>* listFolders();
void listMessages(const QString & mailbox,Maillist&target );
QString fetchBody(const QString & mailbox,const RecMail&mail);
protected:
RecMail*parse_list_result(mailimap_msg_att*);
private:
IMAPaccount *account;
};
#endif
diff --git a/noncore/net/mail/mail.pro b/noncore/net/mail/mail.pro
index c913826..46a476d 100644
--- a/noncore/net/mail/mail.pro
+++ b/noncore/net/mail/mail.pro
@@ -1,40 +1,39 @@
CONFIG += qt warn_on debug quick-app
HEADERS = defines.h \
logindialog.h \
settings.h \
editaccounts.h \
mailwrapper.h \
composemail.h \
accountview.h \
mainwindow.h \
opiemail.h
SOURCES = main.cpp \
opiemail.cpp \
mainwindow.cpp \
accountview.cpp \
composemail.cpp \
mailwrapper.cpp \
imapwrapper.cpp \
addresspicker.cpp \
editaccounts.cpp \
logindialog.cpp \
settings.cpp
INTERFACES = editaccountsui.ui \
selectmailtypeui.ui \
imapconfigui.ui \
pop3configui.ui \
nntpconfigui.ui \
smtpconfigui.ui \
addresspickerui.ui \
logindialogui.ui \
composemailui.ui
INCLUDEPATH += $(OPIEDIR)/include
-INCLUDEPATH += $(OPIEDIR)/include/libetpan
LIBS += -lqpe -lopie -letpan -lssl -lcrypto -ldb
TARGET = opiemail
include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/net/mail/mailwrapper.cpp b/noncore/net/mail/mailwrapper.cpp
index 17bed65..13a3fd9 100644
--- a/noncore/net/mail/mailwrapper.cpp
+++ b/noncore/net/mail/mailwrapper.cpp
@@ -1,269 +1,269 @@
#include <qfileinfo.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <qdir.h>
#include <qtextstream.h>
#include "mailwrapper.h"
#include "logindialog.h"
-#include "mail.h"
+//#include "mail.h"
#include "defines.h"
Attachment::Attachment( DocLnk lnk )
{
doc = lnk;
size = QFileInfo( doc.file() ).size();
}
Folder::Folder(const QString&tmp_name )
{
name = tmp_name;
nameDisplay = name;
for ( int pos = nameDisplay.find( '&' ); pos != -1;
pos = nameDisplay.find( '&' ) ) {
int end = nameDisplay.find( '-' );
if ( end == -1 || end <= pos ) break;
QString str64 = nameDisplay.mid( pos + 1, end - pos - 1 );
// TODO: do real base64 decoding here !
if ( str64.compare( "APw" ) == 0 ) {
nameDisplay = nameDisplay.replace( pos, end - pos + 1, "ue" );
} else if ( str64.compare( "APY" ) == 0 ) {
nameDisplay = nameDisplay.replace( pos, end - pos + 1, "oe" );
}
}
qDebug( "folder " + name + " - displayed as " + nameDisplay );
}
MailWrapper::MailWrapper( Settings *s )
: QObject()
{
settings = s;
}
QString MailWrapper::mailsmtpError( int errnum )
{
switch ( errnum ) {
case MAILSMTP_NO_ERROR:
return tr( "No error" );
case MAILSMTP_ERROR_UNEXPECTED_CODE:
return tr( "Unexpected error code" );
case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
return tr( "Service not available" );
case MAILSMTP_ERROR_STREAM:
return tr( "Stream error" );
case MAILSMTP_ERROR_HOSTNAME:
return tr( "gethostname() failed" );
case MAILSMTP_ERROR_NOT_IMPLEMENTED:
return tr( "Not implemented" );
case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
return tr( "Error, action not taken" );
case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
return tr( "Data exceeds storage allocation" );
case MAILSMTP_ERROR_IN_PROCESSING:
return tr( "Error in processing" );
// case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
// return tr( "Insufficient system storage" );
case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
return tr( "Mailbox unavailable" );
case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
return tr( "Mailbox name not allowed" );
case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
return tr( "Bad command sequence" );
case MAILSMTP_ERROR_USER_NOT_LOCAL:
return tr( "User not local" );
case MAILSMTP_ERROR_TRANSACTION_FAILED:
return tr( "Transaction failed" );
case MAILSMTP_ERROR_MEMORY:
return tr( "Memory error" );
case MAILSMTP_ERROR_CONNECTION_REFUSED:
return tr( "Connection refused" );
default:
return tr( "Unknown error code" );
}
}
mailimf_mailbox *MailWrapper::newMailbox(const QString&name, const QString&mail )
{
return mailimf_mailbox_new( strdup( name.latin1() ),
strdup( mail.latin1() ) );
}
mailimf_address_list *MailWrapper::parseAddresses(const QString&addr )
{
mailimf_address_list *addresses;
if ( addr.isEmpty() ) return NULL;
addresses = mailimf_address_list_new_empty();
QStringList list = QStringList::split( ',', addr );
QStringList::Iterator it;
for ( it = list.begin(); it != list.end(); it++ ) {
char *str = strdup( (*it).latin1() );
int err = mailimf_address_list_add_parse( addresses, str );
if ( err != MAILIMF_NO_ERROR ) {
qDebug( "Error parsing" );
qDebug( *it );
free( str );
} else {
qDebug( "Parse success! :)" );
}
}
return addresses;
}
mailimf_fields *MailWrapper::createImfFields( Mail *mail )
{
mailimf_fields *fields;
mailimf_field *xmailer;
mailimf_mailbox *sender, *fromBox;
mailimf_mailbox_list *from;
mailimf_address_list *to, *cc, *bcc, *reply;
char *subject = strdup( mail->getSubject().latin1() );
int err;
sender = newMailbox( mail->getName(), mail->getMail() );
if ( sender == NULL ) goto err_free;
fromBox = newMailbox( mail->getName(), mail->getMail() );
if ( fromBox == NULL ) goto err_free_sender;
from = mailimf_mailbox_list_new_empty();
if ( from == NULL ) goto err_free_fromBox;
err = mailimf_mailbox_list_add( from, fromBox );
if ( err != MAILIMF_NO_ERROR ) goto err_free_from;
to = parseAddresses( mail->getTo() );
if ( to == NULL ) goto err_free_from;
cc = parseAddresses( mail->getCC() );
bcc = parseAddresses( mail->getBCC() );
reply = parseAddresses( mail->getReply() );
fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc,
NULL, NULL, subject );
if ( fields == NULL ) goto err_free_reply;
xmailer = mailimf_field_new_custom( strdup( "User-Agent" ),
strdup( USER_AGENT ) );
if ( xmailer == NULL ) goto err_free_fields;
err = mailimf_fields_add( fields, xmailer );
if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer;
return fields; // Success :)
err_free_xmailer:
mailimf_field_free( xmailer );
err_free_fields:
mailimf_fields_free( fields );
err_free_reply:
mailimf_address_list_free( reply );
mailimf_address_list_free( bcc );
mailimf_address_list_free( cc );
mailimf_address_list_free( to );
err_free_from:
mailimf_mailbox_list_free( from );
err_free_fromBox:
mailimf_mailbox_free( fromBox );
err_free_sender:
mailimf_mailbox_free( sender );
err_free:
free( subject );
qDebug( "createImfFields - error" );
return NULL; // Error :(
}
mailmime *MailWrapper::buildTxtPart( QString str )
{
mailmime *txtPart;
mailmime_fields *fields;
mailmime_content *content;
mailmime_parameter *param;
char *txt = strdup( str.latin1() );
int err;
param = mailmime_parameter_new( strdup( "charset" ),
strdup( "iso-8859-1" ) );
if ( param == NULL ) goto err_free;
content = mailmime_content_new_with_str( "text/plain" );
if ( content == NULL ) goto err_free_param;
err = clist_append( content->parameters, param );
if ( err != MAILIMF_NO_ERROR ) goto err_free_content;
fields = mailmime_fields_new_encoding( MAILMIME_MECHANISM_8BIT );
if ( fields == NULL ) goto err_free_content;
txtPart = mailmime_new_empty( content, fields );
if ( txtPart == NULL ) goto err_free_fields;
err = mailmime_set_body_text( txtPart, txt, strlen( txt ) );
if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart;
return txtPart; // Success :)
err_free_txtPart:
mailmime_free( txtPart );
err_free_fields:
mailmime_fields_free( fields );
err_free_content:
mailmime_content_free( content );
err_free_param:
mailmime_parameter_free( param );
err_free:
free( txt );
qDebug( "buildTxtPart - error" );
return NULL; // Error :(
}
mailmime *MailWrapper::buildFilePart( QString filename, QString mimetype )
{
mailmime * filePart;
mailmime_fields * fields;
mailmime_content * content;
mailmime_parameter * param = NULL;
int err;
int pos = filename.findRev( '/' );
QString tmp = filename.right( filename.length() - ( pos + 1 ) );
char *name = strdup( tmp.latin1() ); // just filename
char *file = strdup( filename.latin1() ); // full name with path
char *mime = strdup( mimetype.latin1() ); // mimetype -e.g. text/plain
fields = mailmime_fields_new_filename(
MAILMIME_DISPOSITION_TYPE_ATTACHMENT, name,
MAILMIME_MECHANISM_BASE64 );
if ( fields == NULL ) goto err_free;
content = mailmime_content_new_with_str( mime );
if ( content == NULL ) goto err_free_fields;
if ( mimetype.compare( "text/plain" ) == 0 ) {
param = mailmime_parameter_new( strdup( "charset" ),
strdup( "iso-8859-1" ) );
if ( param == NULL ) goto err_free_content;
err = clist_append( content->parameters, param );
if ( err != MAILIMF_NO_ERROR ) goto err_free_param;
}
filePart = mailmime_new_empty( content, fields );
if ( filePart == NULL ) goto err_free_param;
err = mailmime_set_body_file( filePart, file );
if ( err != MAILIMF_NO_ERROR ) goto err_free_filePart;
return filePart; // Success :)
diff --git a/noncore/net/mail/mailwrapper.h b/noncore/net/mail/mailwrapper.h
index 3de28a0..f45eab7 100644
--- a/noncore/net/mail/mailwrapper.h
+++ b/noncore/net/mail/mailwrapper.h
@@ -1,183 +1,183 @@
#ifndef MAILWRAPPER_H
#define MAILWRAPPER_H
#include <qpe/applnk.h>
-#include <mailmime.h>
-#include <mailimf.h>
-#include <mailsmtp.h>
-#include <mailimap.h>
-#include <mailstorage.h>
-#include <maildriver.h>
+#include <libetpan/mailmime.h>
+#include <libetpan/mailimf.h>
+#include <libetpan/mailsmtp.h>
+#include <libetpan/mailimap.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;
};
#define FLAG_ANSWERED 0
#define FLAG_FLAGGED 1
#define FLAG_DELETED 2
#define FLAG_SEEN 3
#define FLAG_DRAFT 4
#define FLAG_RECENT 5
/* a class to describe mails in a mailbox */
class RecMail
{
public:
RecMail();
virtual ~RecMail(){}
const int getNumber()const{return msg_number;}
void setNumber(int number){msg_number=number;}
const QString&getDate()const{ return date; }
void setDate( const QString&a ) { date = a; }
const QString&getFrom()const{ return from; }
void setFrom( const QString&a ) { from = a; }
const QString&getSubject()const { return subject; }
void setSubject( const QString&s ) { subject = s; }
void setFlags(const QBitArray&flags){msg_flags = flags;}
const QBitArray&getFlags()const{return msg_flags;}
#if 0
void setDate(const QString&dstring);
void setDate(const QDateTime&date){mDate = date;}
QString getDate()const{return mDate.toString();}
#endif
protected:
QString subject,date,from;
int msg_number;
QBitArray msg_flags;
#if 0
QDateTime mDate;
#endif
};
typedef QList<RecMail> Maillist;
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&getDisplayName()const { return nameDisplay; }
const QString&getName()const { return name; }
virtual bool may_select()const{return true;};
private:
QString nameDisplay, name;
};
class IMAPFolder : public Folder
{
public:
IMAPFolder( QString name,bool select=true ) : Folder( name ),m_MaySelect(select) {}
virtual bool may_select()const{return m_MaySelect;}
private:
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;
};
class IMAPwrapper : public QObject
{
Q_OBJECT
public:
IMAPwrapper( IMAPaccount *a );
QList<IMAPFolder>* listFolders();
void listMessages(const QString & mailbox,Maillist&target );
QString fetchBody(const QString & mailbox,const RecMail&mail);
protected:
RecMail*parse_list_result(mailimap_msg_att*);
private:
IMAPaccount *account;
};
#endif