summaryrefslogtreecommitdiff
path: root/noncore/net/mail/libmailwrapper/imapwrapper.cpp
authorharlekin <harlekin>2003-12-10 02:02:53 (UTC)
committer harlekin <harlekin>2003-12-10 02:02:53 (UTC)
commit1f0b92e554b76852af210ceb277b3e9ecb09a43d (patch) (side-by-side diff)
treea813761b2f0d1a2b8a9a1a996d6e37d511d24f0f /noncore/net/mail/libmailwrapper/imapwrapper.cpp
parenta908d0ffdb5cee72b7823fc411119b8e1e3faad8 (diff)
downloadopie-1f0b92e554b76852af210ceb277b3e9ecb09a43d.zip
opie-1f0b92e554b76852af210ceb277b3e9ecb09a43d.tar.gz
opie-1f0b92e554b76852af210ceb277b3e9ecb09a43d.tar.bz2
ssl for imap now working
Diffstat (limited to 'noncore/net/mail/libmailwrapper/imapwrapper.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/mail/libmailwrapper/imapwrapper.cpp60
1 files changed, 33 insertions, 27 deletions
diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
index eae85a7..dc02780 100644
--- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp
+++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp
@@ -24,30 +24,36 @@ void IMAPwrapper::imap_progress( size_t current, size_t maximum )
void IMAPwrapper::login()
{
logout();
const char *server, *user, *pass;
uint16_t port;
int err = MAILIMAP_NO_ERROR;
-
+
server = account->getServer().latin1();
port = account->getPort().toUInt();
user = account->getUser().latin1();
pass = account->getPassword().latin1();
-
- m_imap = mailimap_new( 20, &imap_progress );
+
+ m_imap = mailimap_new( 20, &imap_progress );
/* connect */
- err = mailimap_socket_connect( m_imap, (char*)server, port );
- if ( err != MAILIMAP_NO_ERROR &&
+ // err = mailimap_socket_connect( m_imap, (char*)server, port );
+ if (account->getSSL()) {
+ err = mailimap_ssl_connect( m_imap, (char*)server, port );
+ } else {
+ err = mailimap_socket_connect( m_imap, (char*)server, port );
+ }
+
+ if ( err != MAILIMAP_NO_ERROR &&
err != MAILIMAP_NO_ERROR_AUTHENTICATED &&
err != MAILIMAP_NO_ERROR_NON_AUTHENTICATED ) {
qDebug("error connecting server: %s",m_imap->response);
mailimap_free( m_imap );
m_imap = 0;
return;
}
-
+
/* login */
err = mailimap_login_simple( m_imap, (char*)user, (char*)pass );
if ( err != MAILIMAP_NO_ERROR ) {
qDebug("error logging in imap: %s",m_imap->response);
err = mailimap_close( m_imap );
mailimap_free( m_imap );
@@ -71,13 +77,13 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
int err = MAILIMAP_NO_ERROR;
clist *result;
clistcell *current;
mailimap_fetch_att *fetchAtt,*fetchAttFlags,*fetchAttDate;
mailimap_fetch_type *fetchType;
mailimap_set *set;
-
+
mb = mailbox.latin1();
login();
if (!m_imap) {
return;
}
/* select mailbox READONLY for operations */
@@ -92,26 +98,26 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
if (last == 0) {
qDebug("mailbox has no mails");
logout();
return;
}
-
- result = clist_new();
+
+ result = clist_new();
/* the range has to start at 1!!! not with 0!!!! */
set = mailimap_set_new_interval( 1, last );
fetchAtt = mailimap_fetch_att_new_envelope();
fetchAttFlags = mailimap_fetch_att_new_flags();
fetchAttDate = mailimap_fetch_att_new_internaldate();
-
+
//fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
fetchType = mailimap_fetch_type_new_fetch_att_list_empty();
mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAtt);
mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttFlags);
mailimap_fetch_type_new_fetch_att_list_add(fetchType,fetchAttDate);
-
+
err = mailimap_fetch( m_imap, set, fetchType, &result );
mailimap_set_free( set );
/* cleans up the fetch_att's too! */
mailimap_fetch_type_free( fetchType );
QString date,subject,from;
@@ -141,20 +147,20 @@ void IMAPwrapper::listMessages(const QString&mailbox,QList<RecMail> &target )
QList<IMAPFolder>* IMAPwrapper::listFolders()
{
const char *path, *mask;
int err = MAILIMAP_NO_ERROR;
clist *result;
clistcell *current;
-
+
QList<IMAPFolder> * folders = new QList<IMAPFolder>();
folders->setAutoDelete( true );
login();
if (!m_imap) {
return folders;
}
-
+
/*
* First we have to check for INBOX 'cause it sometimes it's not inside the path.
* We must not forget to filter them out in next loop!
* it seems like ugly code. and yes - it is ugly code. but the best way.
*/
QString temp;
@@ -173,17 +179,17 @@ QList<IMAPFolder>* IMAPwrapper::listFolders()
current = current->next;
}
} else {
qDebug("error fetching folders: %s",m_imap->response);
}
mailimap_list_result_free( result );
-
+
/*
* second stage - get the other then inbox folders
*/
- mask = "*" ;
+ mask = "*" ;
path = account->getPrefix().latin1();
result = clist_new();
qDebug(path);
err = mailimap_list( m_imap, (char*)path, (char*)mask, &result );
if ( err == MAILIMAP_NO_ERROR ) {
current = result->first;
@@ -193,13 +199,13 @@ QList<IMAPFolder>* IMAPwrapper::listFolders()
// instead of using strdup!
temp = list->mb;
current = current->next;
if (temp.lower()=="inbox")
continue;
folders->append(new IMAPFolder(temp));
-
+
}
} else {
qDebug("error fetching folders %s",m_imap->response);
}
mailimap_list_result_free( result );
return folders;
@@ -211,13 +217,13 @@ RecMail*IMAPwrapper::parse_list_result(mailimap_msg_att* m_att)
mailimap_msg_att_item *item=0;
clistcell *current,*c,*cf;
mailimap_msg_att_dynamic*flist;
mailimap_flag_fetch*cflag;
QBitArray mFlags(7);
QStringList addresslist;
-
+
if (!m_att) {
return m;
}
c = clist_begin(m_att->list);
while ( c ) {
@@ -326,30 +332,30 @@ RecBody IMAPwrapper::fetchBody(const RecMail&mail)
clist *result;
clistcell *current;
mailimap_fetch_att *fetchAtt;
mailimap_fetch_type *fetchType;
mailimap_set *set;
mailimap_body*body_desc;
-
+
mb = mail.getMbox().latin1();
-
+
login();
if (!m_imap) {
return body;
}
/* select mailbox READONLY for operations */
err = mailimap_examine( m_imap, (char*)mb);
if ( err != MAILIMAP_NO_ERROR ) {
qDebug("error selecting mailbox: %s",m_imap->response);
logout();
return body;
}
- result = clist_new();
+ result = clist_new();
/* the range has to start at 1!!! not with 0!!!! */
set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
- fetchAtt = mailimap_fetch_att_new_body();
+ fetchAtt = mailimap_fetch_att_new_body();
fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
err = mailimap_fetch( m_imap, set, fetchType, &result );
mailimap_set_free( set );
mailimap_fetch_type_free( fetchType );
if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
@@ -358,19 +364,19 @@ RecBody IMAPwrapper::fetchBody(const RecMail&mail)
mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
body_desc = item->msg_att_static->body;
if (body_desc->type==MAILIMAP_BODY_1PART) {
searchBodyText(mail,body_desc->body_1part,body);
} else {
}
-
+
} else {
qDebug("error fetching body: %s",m_imap->response);
}
clist_free(result);
- logout();
+ logout();
return body;
}
void IMAPwrapper::searchBodyText(const RecMail&mail,mailimap_body_type_1part*mailDescription,RecBody&target_body)
{
if (!mailDescription) {
@@ -393,28 +399,28 @@ void IMAPwrapper::fillPlainBody(const RecMail&mail,RecBody&target_body, mailimap
int err = MAILIMAP_NO_ERROR;
clist *result;
clistcell *current;
mailimap_fetch_att *fetchAtt;
mailimap_fetch_type *fetchType;
mailimap_set *set;
-
+
mb = mail.getMbox().latin1();
-
+
if (!m_imap) {
return;
}
- result = clist_new();
+ result = clist_new();
/* the range has to start at 1!!! not with 0!!!! */
set = mailimap_set_new_interval( mail.getNumber(),mail.getNumber() );
fetchAtt = mailimap_fetch_att_new_rfc822_text();
fetchType = mailimap_fetch_type_new_fetch_att(fetchAtt);
err = mailimap_fetch( m_imap, set, fetchType, &result );
mailimap_set_free( set );
mailimap_fetch_type_free( fetchType );
-
+
if (err == MAILIMAP_NO_ERROR && (current=clist_begin(result)) ) {
mailimap_msg_att * msg_att;
msg_att = (mailimap_msg_att*)current->data;
mailimap_msg_att_item*item = (mailimap_msg_att_item*)msg_att->list->first->data;
if (item->msg_att_static && item->msg_att_static->rfc822_text) {
body = item->msg_att_static->rfc822_text;