📄 emailhandler.cpp
字号:
replace(mBody, "\n", "\r\n"); if ( mBody.indexOf("\r\n.\r\n", -5) > -1 ) { mBody.truncate( mBody.length() -3 ); // leave \r\n only, smtpclient handles delimiter of message } else if ( !mBody.indexOf("\r\n", -2) > -1 ) { mBody += "\r\n"; } if ( currentMail->replyTo().isEmpty() ) { smtpClient->addMail("<" + currentMail->fromEmail() + ">", currentMail->subject(), combinedList, mBody); } else { smtpClient->addMail(userName, currentMail->subject(), combinedList, mBody); } smtpOk = true; //reset the Bcc just in case if(mailBcc.count() > 0){ currentMail->setBcc(mailBcc); currentMail->encodeMail(); } } } else { //error temp = tr("Could not locate all files\nin mail with subject:\n" "%1\nNO mail has been sent") .arg( currentMail->subject() ); QMessageBox::warning(qApp->activeWindow(), tr( "Mail encoding error" ), temp, tr( "OK" )); allOk = false; } } if (allOk && (smtpOk#ifdef QTOPIA_PHONE || smsOk#ifndef QTOPIA_NO_MMS || mmsOk#endif#endif )) { if (smtpOk) { smtpClient->setAccount(smtpAccount); smtpClient->newConnection(); }#ifdef QTOPIA_PHONE if (smsOk) smsClient->newConnection(); else smsClient->clearList();#ifndef QTOPIA_NO_MMS if (mmsOk) mmsClient->newConnection();#endif#endif emit mailSendSize(allMailSize); } else { emit mailSent(-1);#ifdef QTOPIA_PHONE smsClient->clearList();#endif }}void EmailHandler::setSmtpAccount(MailAccount *account){ smtpAccount = account;}void EmailHandler::setMailAccount(MailAccount *account){ mailAccount = account;}void EmailHandler::setSmsAccount(MailAccount *account){ smsAccount = account;#ifdef QTOPIA_PHONE smsClient->setAccount( account );#endif}void EmailHandler::setMmsAccount(MailAccount *account){ mmsAccount = account;#ifdef QTOPIA_PHONE#ifndef QTOPIA_NO_MMS mmsClient->setAccount(account);#endif#endif}void EmailHandler::getMailHeaders(){ Client *client = clientFromAccount(mailAccount); if ( mailAccount->accountType() == MailAccount::POP ) receiving = true; // maybe this should be unconditional if (client) { client->setAccount(mailAccount); client->headersOnly(true, 2000); //less than 2000, download all client->newConnection(); }}void EmailHandler::getMailByList(MailList *mailList, bool newConnection){ if (mailList->count() == 0) { //should not occur though emit mailTransferred(0); return; } receiving = true; Client *client = clientFromAccount(mailAccount); if (client) { client->headersOnly(false, 0); if (newConnection) { client->setAccount(mailAccount); client->newConnection(); } client->setSelectedMails(mailList, !newConnection); }}void EmailHandler::popQuit(){ Client *client = clientFromAccount(mailAccount); if (client) client->quit(); receiving = false;}void EmailHandler::acceptMail(const Email &mail){#if defined(QTOPIA_PHONE) && !defined(QTOPIA_NO_MMS) if (mmsClient && mail.type() == MailMessage::MMS) { mmsClient->sendNotifyResp(mail, "Deferred"); }#elif !defined(QTOPIA_DESKTOP) //Q_CONST_UNUSED(mail); (void)mail;#endif}void EmailHandler::rejectMail(const Email &mail){#if defined(QTOPIA_PHONE) && !defined(QTOPIA_NO_MMS) if (mmsClient && mail.type() == MailMessage::MMS) { mmsClient->sendNotifyResp(mail, "Rejected"); }#elif !defined(QTOPIA_DESKTOP) //Q_CONST_UNUSED(mail); (void)mail;#endif}void EmailHandler::unresolvedUidl(QStringList &list){ QString user = mailAccount->id(); emit unresolvedUidlList(user, list);}void EmailHandler::messageArrived(const QString &message, const QString &id, const QUuid &internalId, uint size, bool complete){ Email mail; mail.setStatus(EFlag_Incoming, true ); mail.setUuid( internalId ); QString str = message; replace(str, QString::fromLatin1( "\r\n" ), QString::fromLatin1( "\n" ) ); mail.fromRFC822( str ); mail.setSize( size ); mail.setStatus(EFlag_Downloaded, complete); mail.setServerUid( id.mid( id.indexOf(" ") + 1, id.length() ) ); if (id.startsWith("sms:")) { mail.setServerUid(id); if (smsAccount) mail.setFromAccount( smsAccount->id() ); mail.setType(MailMessage::SMS);#ifndef QTOPIA_NO_MMS } else if (id.startsWith("X-Mms-Content-Location") || id.startsWith("X-Mms-MMS-Version")) { if (mmsAccount) mail.setFromAccount( mmsAccount->id() ); mail.setType(MailMessage::MMS);#endif } else { mail.setFromAccount( mailAccount->id() ); mail.setType(MailMessage::Email); } mail.setFromMailbox(""); emit mailArrived(mail);}void EmailHandler::messageArrived(Email mail){ emit mailArrived(mail);}void EmailHandler::messageArrived(const QString &message, const QString &id, const QUuid &internalId, uint size, bool complete, const QString &folder, uint flags){ Email mail; mail.setUuid( internalId ); mail.setStatus(EFlag_Incoming, true ); if ( flags & MFlag_Seen ) { mail.setStatus(EFlag_IMAP_Seen, true ); } if ( flags & MFlag_Answered ) mail.setStatus(EFlag_Replied, true ); QString str = message; replace(str, QString::fromLatin1( "\r\n" ), QString::fromLatin1( "\n" ) ); mail.fromRFC822( str ); mail.setSize( size ); mail.setStatus(EFlag_Downloaded, complete); mail.setServerUid( id.mid( id.indexOf(" ") + 1, id.length() ) ); mail.setFromAccount( mailAccount->id() ); mail.setFromMailbox( folder ); mail.setType(MailMessage::Email); emit mailArrived(mail);}void EmailHandler::cancel(){ QString msg = tr( "Cancelled by user" ); receiving = false; /* all clients handles this call regardless of whether they are actually in use or not (disregarded) */ popClient->errorHandling(ErrCancel, msg); imapClient->errorHandling(ErrCancel, msg); smtpClient->errorHandling(ErrCancel, msg);#ifdef QTOPIA_PHONE smsClient->errorHandling(ErrCancel, msg);#ifndef QTOPIA_NO_MMS mmsClient->errorHandling(ErrCancel, msg);#endif#endif}Client* EmailHandler::clientFromAccount(MailAccount *account){ if ( account->accountType() == MailAccount::POP ) return popClient;#ifdef QTOPIA_PHONE#ifndef QTOPIA_NO_MMS else if ( account->accountType() == MailAccount::MMS) return mmsClient;#endif else if ( account->accountType() == MailAccount::SMS) return smsClient;#endif else if ( account->accountType() == MailAccount::IMAP) return imapClient; return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -