author | groucho <groucho> | 2003-05-07 06:54:33 (UTC) |
---|---|---|
committer | groucho <groucho> | 2003-05-07 06:54:33 (UTC) |
commit | a3c1989c0563c0b16c5a6e722cd8484611622499 (patch) (side-by-side diff) | |
tree | 85d534ba6374cc277dc205399db33dfd82f659f9 | |
parent | 548a605ac7925894ed82ff40207e7814a74f8f67 (diff) | |
download | opie-a3c1989c0563c0b16c5a6e722cd8484611622499.zip opie-a3c1989c0563c0b16c5a6e722cd8484611622499.tar.gz opie-a3c1989c0563c0b16c5a6e722cd8484611622499.tar.bz2 |
Small fix which show attachment icons for downloaded mails also
-rw-r--r-- | noncore/net/mailit/emailhandler.cpp | 13 | ||||
-rw-r--r-- | noncore/unsupported/mailit/emailhandler.cpp | 13 |
2 files changed, 2 insertions, 24 deletions
diff --git a/noncore/net/mailit/emailhandler.cpp b/noncore/net/mailit/emailhandler.cpp index c7b27a0..62fa64f 100644 --- a/noncore/net/mailit/emailhandler.cpp +++ b/noncore/net/mailit/emailhandler.cpp @@ -81,272 +81,261 @@ void EmailHandler::sendMail(QList<Email> *mailList) smtpClient->addMail(userName, currentMail->subject, currentMail->recipients, currentMail->rawMail); } else { //error temp = tr("Could not locate all files in \nmail with subject: ") + currentMail->subject; temp += tr("\nMail has NOT been sent"); QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n")); } } smtpClient->newConnection(mailAccount.smtpServer, 25); } void EmailHandler::setAccount(MailAccount account) { mailAccount = account; } void EmailHandler::getMail() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); if (mailAccount.synchronize) { popClient->setSynchronize(mailAccount.lastServerMailCount); } else { popClient->removeSynchronize(); } headers = FALSE; //popClient->headersOnly(headers, 0); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailHeaders() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); headers = TRUE; popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all qDebug("Initiating connection"); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailByList(MailList *mailList) { if (mailList->count() == 0) { //should not occur though emit mailTransfered(0); return; } headers = FALSE; popClient->headersOnly(FALSE, 0); popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd); popClient->setSelectedMails(mailList); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete) { Email mail; mail.rawMail = message; mail.serverId = id; mail.size = size; mail.downloaded = complete; emit mailArrived(mail, FALSE); } bool EmailHandler::parse(QString in, QString lineShift, Email *mail) { QString temp, boundary; int pos; QString delimiter, header, body, mimeHeader, mimeBody; QString content, contentType, contentAttribute, id, encoding; QString fileName, storedName; int enclosureId = 0; mail->rawMail = in; mail->received = TRUE; mail->files.setAutoDelete(TRUE); temp = lineShift + "." + lineShift; if (in.right(temp.length()) != temp) { mail->rawMail += temp; } delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n" pos = in.find(delimiter, 0, FALSE); header = in.left(pos); body = in.right(in.length() - pos - delimiter.length()); if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n')) body.truncate(body.length()-2); TextParser p(header, lineShift); if ((pos = p.find("FROM",':', 0, TRUE)) != -1) { pos++; if (p.separatorAt(pos) == ' ') { mail->from = p.getString(&pos, '<', false); mail->from = mail->from.stripWhiteSpace(); if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) { mail->from = mail->from.left(mail->from.length() - 1); mail->from = mail->from.right(mail->from.length() - 1); } pos++; mail->fromMail = p.getString(&pos, '>', false); } else { if (p.separatorAt(pos) == '<') //No name.. nasty pos++; //pos++; mail->fromMail = p.getString(&pos, 'z', TRUE); if (mail->fromMail.at(mail->fromMail.length()-1) == '>') mail->fromMail.truncate(mail->fromMail.length() - 1); mail->from=mail->fromMail; } } pos=0; //Search for To: after the FROM: attribute to prevent hitting the Delivered-To: while((pos = p.find("TO",':', pos+1, TRUE))!=-1) { QString rec; - if (p.separatorAt(pos-1)!='-') + if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To: { pos++; mail->recipients.append(p.getString(&pos, '\r', TRUE)); } - /*else { - if ((p.separatorAt(pos) == '<')|| (p.separatorAt(pos) == ' ')) //No name.. nasty - pos++; - pos++; - mail->fromMail = p.getString(&pos, 'z', TRUE); - if (mail->fromMail.at(mail->fromMail.length()-1) == '>') - mail->fromMail.truncate(mail->fromMail.length() - 1); - mail->from=mail->fromMail; - } - mail->recipients.append (p.getString(&pos, 'z', TRUE) ); - }*/ } // //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") ); if ((pos = p.find("CC",':', 0, TRUE)) != -1) { pos++; mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); } if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) { pos++; mail->subject = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("DATE",':', 0, TRUE)) != -1) { pos++; mail->date = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) { pos++; if ( (p.wordAt(pos).upper() == "ID") && (p.separatorAt(pos) == ':') ) { id = p.getString(&pos, 'z', TRUE); mail->id = id; } } pos = 0; while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) { pos++; if ( (p.wordAt(pos).upper() == "VERSION") && (p.separatorAt(pos) == ':') ) { pos++; if (p.getString(&pos, 'z', true) == "1.0") { mail->mimeType = 1; } } } if (mail->mimeType == 1) { boundary = ""; if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) { pos++; boundary = p.getString(&pos, 'z', true); if (boundary[0] == '"') { boundary = boundary.left(boundary.length() - 1); //strip " boundary = boundary.right(boundary.length() - 1); //strip " } boundary = "--" + boundary; //create boundary field } if (boundary == "") { //fooled by Mime-Version mail->body = body; mail->bodyPlain = body; return mail; } while (body.length() > 0) { pos = body.find(boundary, 0, FALSE); pos = body.find(delimiter, pos, FALSE); mimeHeader = body.left(pos); mimeBody = body.right(body.length() - pos - delimiter.length()); TextParser bp(mimeHeader, lineShift); contentType = ""; contentAttribute = ""; fileName = ""; if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) { pos++; if ( (bp.wordAt(pos).upper() == "TYPE") && (bp.separatorAt(pos) == ':') ) { contentType = bp.nextWord().upper(); if (bp.nextSeparator() == '/') contentAttribute = bp.nextWord().upper(); content = contentType + "/" + contentAttribute; } if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) { pos++; encoding = bp.getString(&pos, 'z', TRUE); } if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) { pos++; fileName = bp.getString(&pos, 'z', TRUE); fileName = fileName.right(fileName.length() - 1); fileName = fileName.left(fileName.length() - 1); } } pos = mimeBody.find(boundary, 0, FALSE); if (pos == -1) //should not occur, malformed mail pos = mimeBody.length(); body = mimeBody.right(mimeBody.length() - pos); mimeBody = mimeBody.left(pos); if (fileName != "") { //attatchments of some type, audio, image etc. Enclosure e; e.id = enclosureId; e.originalName = fileName; e.contentType = contentType; e.contentAttribute = contentAttribute; e.encoding = encoding; e.body = mimeBody; e.saved = FALSE; mail->addEnclosure(&e); enclosureId++; } else if (contentType == "TEXT") { if (contentAttribute == "PLAIN") { mail->body = mimeBody; mail->bodyPlain = mimeBody; } if (contentAttribute == "HTML") { mail->body = mimeBody; } } } } else { mail->bodyPlain = body; mail->body = body; } return TRUE; diff --git a/noncore/unsupported/mailit/emailhandler.cpp b/noncore/unsupported/mailit/emailhandler.cpp index c7b27a0..62fa64f 100644 --- a/noncore/unsupported/mailit/emailhandler.cpp +++ b/noncore/unsupported/mailit/emailhandler.cpp @@ -81,272 +81,261 @@ void EmailHandler::sendMail(QList<Email> *mailList) smtpClient->addMail(userName, currentMail->subject, currentMail->recipients, currentMail->rawMail); } else { //error temp = tr("Could not locate all files in \nmail with subject: ") + currentMail->subject; temp += tr("\nMail has NOT been sent"); QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n")); } } smtpClient->newConnection(mailAccount.smtpServer, 25); } void EmailHandler::setAccount(MailAccount account) { mailAccount = account; } void EmailHandler::getMail() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); if (mailAccount.synchronize) { popClient->setSynchronize(mailAccount.lastServerMailCount); } else { popClient->removeSynchronize(); } headers = FALSE; //popClient->headersOnly(headers, 0); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailHeaders() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); headers = TRUE; popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all qDebug("Initiating connection"); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailByList(MailList *mailList) { if (mailList->count() == 0) { //should not occur though emit mailTransfered(0); return; } headers = FALSE; popClient->headersOnly(FALSE, 0); popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd); popClient->setSelectedMails(mailList); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete) { Email mail; mail.rawMail = message; mail.serverId = id; mail.size = size; mail.downloaded = complete; emit mailArrived(mail, FALSE); } bool EmailHandler::parse(QString in, QString lineShift, Email *mail) { QString temp, boundary; int pos; QString delimiter, header, body, mimeHeader, mimeBody; QString content, contentType, contentAttribute, id, encoding; QString fileName, storedName; int enclosureId = 0; mail->rawMail = in; mail->received = TRUE; mail->files.setAutoDelete(TRUE); temp = lineShift + "." + lineShift; if (in.right(temp.length()) != temp) { mail->rawMail += temp; } delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n" pos = in.find(delimiter, 0, FALSE); header = in.left(pos); body = in.right(in.length() - pos - delimiter.length()); if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n')) body.truncate(body.length()-2); TextParser p(header, lineShift); if ((pos = p.find("FROM",':', 0, TRUE)) != -1) { pos++; if (p.separatorAt(pos) == ' ') { mail->from = p.getString(&pos, '<', false); mail->from = mail->from.stripWhiteSpace(); if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) { mail->from = mail->from.left(mail->from.length() - 1); mail->from = mail->from.right(mail->from.length() - 1); } pos++; mail->fromMail = p.getString(&pos, '>', false); } else { if (p.separatorAt(pos) == '<') //No name.. nasty pos++; //pos++; mail->fromMail = p.getString(&pos, 'z', TRUE); if (mail->fromMail.at(mail->fromMail.length()-1) == '>') mail->fromMail.truncate(mail->fromMail.length() - 1); mail->from=mail->fromMail; } } pos=0; //Search for To: after the FROM: attribute to prevent hitting the Delivered-To: while((pos = p.find("TO",':', pos+1, TRUE))!=-1) { QString rec; - if (p.separatorAt(pos-1)!='-') + if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To: { pos++; mail->recipients.append(p.getString(&pos, '\r', TRUE)); } - /*else { - if ((p.separatorAt(pos) == '<')|| (p.separatorAt(pos) == ' ')) //No name.. nasty - pos++; - pos++; - mail->fromMail = p.getString(&pos, 'z', TRUE); - if (mail->fromMail.at(mail->fromMail.length()-1) == '>') - mail->fromMail.truncate(mail->fromMail.length() - 1); - mail->from=mail->fromMail; - } - mail->recipients.append (p.getString(&pos, 'z', TRUE) ); - }*/ } // //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") ); if ((pos = p.find("CC",':', 0, TRUE)) != -1) { pos++; mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); } if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) { pos++; mail->subject = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("DATE",':', 0, TRUE)) != -1) { pos++; mail->date = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) { pos++; if ( (p.wordAt(pos).upper() == "ID") && (p.separatorAt(pos) == ':') ) { id = p.getString(&pos, 'z', TRUE); mail->id = id; } } pos = 0; while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) { pos++; if ( (p.wordAt(pos).upper() == "VERSION") && (p.separatorAt(pos) == ':') ) { pos++; if (p.getString(&pos, 'z', true) == "1.0") { mail->mimeType = 1; } } } if (mail->mimeType == 1) { boundary = ""; if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) { pos++; boundary = p.getString(&pos, 'z', true); if (boundary[0] == '"') { boundary = boundary.left(boundary.length() - 1); //strip " boundary = boundary.right(boundary.length() - 1); //strip " } boundary = "--" + boundary; //create boundary field } if (boundary == "") { //fooled by Mime-Version mail->body = body; mail->bodyPlain = body; return mail; } while (body.length() > 0) { pos = body.find(boundary, 0, FALSE); pos = body.find(delimiter, pos, FALSE); mimeHeader = body.left(pos); mimeBody = body.right(body.length() - pos - delimiter.length()); TextParser bp(mimeHeader, lineShift); contentType = ""; contentAttribute = ""; fileName = ""; if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) { pos++; if ( (bp.wordAt(pos).upper() == "TYPE") && (bp.separatorAt(pos) == ':') ) { contentType = bp.nextWord().upper(); if (bp.nextSeparator() == '/') contentAttribute = bp.nextWord().upper(); content = contentType + "/" + contentAttribute; } if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) { pos++; encoding = bp.getString(&pos, 'z', TRUE); } if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) { pos++; fileName = bp.getString(&pos, 'z', TRUE); fileName = fileName.right(fileName.length() - 1); fileName = fileName.left(fileName.length() - 1); } } pos = mimeBody.find(boundary, 0, FALSE); if (pos == -1) //should not occur, malformed mail pos = mimeBody.length(); body = mimeBody.right(mimeBody.length() - pos); mimeBody = mimeBody.left(pos); if (fileName != "") { //attatchments of some type, audio, image etc. Enclosure e; e.id = enclosureId; e.originalName = fileName; e.contentType = contentType; e.contentAttribute = contentAttribute; e.encoding = encoding; e.body = mimeBody; e.saved = FALSE; mail->addEnclosure(&e); enclosureId++; } else if (contentType == "TEXT") { if (contentAttribute == "PLAIN") { mail->body = mimeBody; mail->bodyPlain = mimeBody; } if (contentAttribute == "HTML") { mail->body = mimeBody; } } } } else { mail->bodyPlain = body; mail->body = body; } return TRUE; |