summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mail2/TODO5
-rw-r--r--noncore/unsupported/mail2/composer.cpp2
-rw-r--r--noncore/unsupported/mail2/libmail/mailfactory.cpp2
3 files changed, 6 insertions, 3 deletions
diff --git a/noncore/unsupported/mail2/TODO b/noncore/unsupported/mail2/TODO
index ef596dc..5873615 100644
--- a/noncore/unsupported/mail2/TODO
+++ b/noncore/unsupported/mail2/TODO
@@ -1,31 +1,32 @@
-LISAmail TODO
+Mail TODO
-----------------------------------------------------------------------------
General stuff:
+ - This program needs a name!
- If password is empty, ask for it during fetch.
- Check if all necessary fields in AccoundEditor are filled.
Protocol related:
- The IMAP implentation is kinda strange and slow.
- The SMTP implentation is goddamn strange.
- POP3 support would be nice.
- NNTP would be kinda neat, too.
- Implent a plugin system.
Security related:
- GnuPG support. This will require a seperate gpg managing utility in
the settings tab.
- sMIME? maybe in the distant future.
Mail management:
- Header caching
- Sieve filtering support?
- Enqueueing/Draft support both on the IMAP server and local.
Testing:
I'm using the courier-imap server at my developement site. I didn't have
much opportunity to test on other servers. Giving me test-accounts on other
servers would be helpfull.
-If you want something added, drop a mail. Comments are allways welcome.
+If you want something added, drop a mail. Comments are always welcome.
diff --git a/noncore/unsupported/mail2/composer.cpp b/noncore/unsupported/mail2/composer.cpp
index 2f13604..03d50b6 100644
--- a/noncore/unsupported/mail2/composer.cpp
+++ b/noncore/unsupported/mail2/composer.cpp
@@ -76,128 +76,130 @@ void Composer::slotPopupHandler(int itemid)
if (itemid == POPUP_ATTACH_RENAME) {
QString tmp = Rename::rename(attachView->currentItem()->text(0), this);
if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp);
} else if (itemid == POPUP_ATTACH_DESC) {
QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this);
if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp);
} else if (itemid == POPUP_ATTACH_REMOVE) {
attachView->takeItem(attachView->currentItem());
}
}
void Composer::slotSendMail()
{
if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) {
QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok"));
return;
}
SendMail smail;
smail.setFrom(from->currentText());
smail.setReplyTo(replyto->text());
smail.setTo(to->text());
smail.setCc(cc->text());
smail.setBcc(bcc->text());
smail.setSubject(subject->text());
smail.setMessage(message->text());
smail.setNeedsMime(attachView->childCount() == 0 ? false : true);
smail.setAccount(accountsLoaded[from->currentItem()]);
if (priority->currentItem() == POPUP_PRIO_LOW) {
smail.setPriority("Low"); // No i18n on purpose
} else if (priority->currentItem() == POPUP_PRIO_NORMAL) {
smail.setPriority("Normal"); // No i18n on purpose
} else if (priority->currentItem() == POPUP_PRIO_HIGH) {
smail.setPriority("High"); // No i18n on purpose
}
QValueList<Attachment> attachments;
QListViewItem *item;
for (item = attachView->firstChild(); item != 0; item = item->itemBelow()) {
attachments.append(((AttachViewItem *)item)->attachment());
}
smail.setAttachments(attachments);
QString header, message;
MailFactory::genMail(header, message, smail, this);
abort->setEnabled(true);
SmtpHandler *handler = new SmtpHandler(header, message, accountsLoaded[from->currentItem()], to->text());
connect(handler, SIGNAL(finished()), SLOT(slotSendFinished()));
connect(handler, SIGNAL(error(const QString &)), SLOT(slotSendError(const QString &)));
connect(handler, SIGNAL(status(const QString &)), status, SLOT(setText(const QString &)));
}
void Composer::slotSendError(const QString &error)
{
status->setText(tr("<font color=#ff0000>Error occoured during sending.</font>"));
QMessageBox::warning(this, tr("Error"), tr("<p>%1</p").arg(error), tr("Ok"));
}
void Composer::slotSendFinished()
{
+ QMessageBox::information(this, tr("Success"), tr("<p>The mail was sent successfully.</p>"), tr("Ok"));
+
status->setText(QString(0));
abort->setEnabled(false);
}
void Composer::slotFillStuff()
{
QValueList<Account> accounts = ConfigFile::getAccounts();
int i = 0;
QValueList<Account>::Iterator it;
for (it = accounts.begin(); it != accounts.end(); it++) {
if (!(*it).email().isEmpty() && !(*it).smtpServer().isEmpty() && !(*it).smtpPort().isEmpty()) {
if (!(*it).realName().isEmpty())
from->insertItem((*it).realName() + " <" + (*it).email() + ">", i);
else
from->insertItem((*it).email());
accountsLoaded.append(*it);
i++;
}
}
}
void Composer::slotFromChanged(int id)
{
Account account = accountsLoaded[id];
if (account.defaultCc()) cc->setText(account.cc());
if (account.defaultBcc()) bcc->setText(account.bcc());
if (account.defaultReplyTo()) replyto->setText(account.replyTo());
if (!account.signature().isEmpty())
message->setText(message->text() + "\n\n-- \n" + account.signature());
}
void Composer::slotOpenAddressPicker()
{
if (!to->isHidden() && cc->isHidden() && bcc->isHidden()) {
if (to->text().isEmpty()) {
to->setText(AddressPicker::getNames());
} else {
to->setText(to->text() + ", " + AddressPicker::getNames());
}
} else if (to->isHidden() && !cc->isHidden() && bcc->isHidden()) {
if (cc->text().isEmpty()) {
cc->setText(AddressPicker::getNames());
} else {
cc->setText(cc->text() + ", " + AddressPicker::getNames());
}
} else if (to->isHidden() && cc->isHidden() && !bcc->isHidden()) {
if (bcc->text().isEmpty()) {
bcc->setText(AddressPicker::getNames());
} else {
bcc->setText(bcc->text() + ", " + AddressPicker::getNames());
}
}
}
void Composer::slotAddAttach()
{
DocLnk lnk = AttachDiag::getFile();
if (lnk.name().isEmpty()) return;
Attachment attachment;
attachment.setFileName(lnk.file());
diff --git a/noncore/unsupported/mail2/libmail/mailfactory.cpp b/noncore/unsupported/mail2/libmail/mailfactory.cpp
index 58cf5f8..427e72c 100644
--- a/noncore/unsupported/mail2/libmail/mailfactory.cpp
+++ b/noncore/unsupported/mail2/libmail/mailfactory.cpp
@@ -39,129 +39,129 @@ MailFactory::MailFactory(SendMail &smail, QWidget *parent)
if (!QString((QString) USERAGENT).isEmpty())
_header += (QString) "User-Agent: " + USERAGENT + "\n";
if (!_smail.needsMime()) {
// if (_smail.encrypt() && !_smail.sign()) {
// openPgpEncrypt(_smail.message(), _header, _body);
// } else if (!_smail.encrypt() && _smail.sign()) {
// openPgpSign(_smail.message(), _header, _body);
// } else if (_smail.encrypt() && _smail.sign()) {
// openPgpSignEncrypt(_smail.message(), _header, _body);
// } else {
_body += _smail.message();
// }
} else {
QString boundary = MiscFunctions::uniqueString();
_header += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\n";
_body += "This is a multi-part message in MIME format.\n\n";
_body += "--" + boundary + "\n";
// if (_smail.encrypt() && !_smail.sign()) {
// QString header, body;
// openPgpEncrypt(_smail.message(), header, body);
// _body += header + "\n" + body + "\n";
// } else if (!_smail.encrypt() && _smail.sign()) {
// QString header, body;
// openPgpSign(_smail.message(), header, body);
// _body += header + "\n" + body + "\n";
// } else if (_smail.encrypt() && _smail.sign()) {
// QString header, body;
// openPgpSignEncrypt(_smail.message(), header, body);
// _body += header + "\n" + body + "\n";
// } else {
// TODO: Do proper charset handling!
_body += "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
_body += "Content-Transfer-Encoding: 8bit\n\n";
_body += _smail.message() + "\n";
// }
QValueList<Attachment> attachments = _smail.attachments();
QValueList<Attachment>::Iterator it;
for (it = attachments.begin(); it != attachments.end(); it++) {
QFile f((*it).fileName());
if (f.open(IO_ReadOnly)) {
QTextStream t(&f);
QString file;
while (!t.atEnd()) file += t.readLine() + "\n";
f.close();
QString mimetype = (new MimeType(*(*it).docLnk()))->id();
_body += "\n--" + boundary + "\n";
_body += "Content-Type: " + mimetype + "; name=\"" + (*it).newName() + "\"\n";
// TODO: Decide which content transfer encoding is best. B64 for binary, QP for text.
_body += "Content-Transfer-Encoding: base64\n";
_body += "Content-Disposition: attachment; filename=\"" + (*it).newName() + "\"\n";
if (!(*it).description().isEmpty())
_body += "Content-Description: " + (*it).description() + "\n";
_body += "\n" + MiscFunctions::encodeBase64(file) + "\n";
} else {
- int ret = QMessageBox::critical(_parent, tr("Error"), tr("<p>Couldn't attach file '%1'. Continue anyway or abort?</p>"), tr("Continue"), tr("Abort"));
+ int ret = QMessageBox::critical(_parent, tr("Error"), tr("<p>Couldn't attach file '%1'. Continue anyway or abort?</p>").arg((*it).fileName()), tr("Continue"), tr("Abort"));
if (ret == 1) {
it = attachments.end();
_abort = true;
}
}
}
_body += "\n--" + boundary + "--";
}
if (_abort) {
_body = QString(0);
_header = QString(0);
}
}
// Unfinished GPG code.
/*
void MailFactory::openPgpEncrypt(const QString &text, QString &header, QString &body)
{
QString boundary = MiscFunctions::uniqueString();
header += "Content-Type: multipart/encrypted; boundary=\"" + boundary + "\"; protocol=\"application/pgp-encrypted\"\n";
body += "--" + boundary + "\n";
body += "Content-Type: application/pgp-encrypted\n\n";
body += "Version: 1\n\n";
body += "--" + boundary + "\n";
body += "Content-Type: application/octet-stream\n\n";
body += GpgHandling::encrypt(_smail.gpgReceivers(), text);
body += "\n--" + boundary + "--\n";
}
void MailFactory::openPgpSign(const QString &text, QString &header, QString &body)
{
QString boundary = MiscFunctions::uniqueString();
header += "Content-Type: multipart/signed; boundary=\"" + boundary + "\"; protocol=\"application/pgp-signature\"\n";
body += "--" + boundary + "\n";
QString temp;
temp += "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
temp += "Content-Transfer-Encoding: quoted-printable\n\n";
temp += MiscFunctions::encodeQPrintable(text) + "\n";
body += temp;
temp.replace(QRegExp("\n"), "\r\n");
QString signature = GpgHandling::sign(temp, _parent);
body += "\n--" + boundary + "\n";
body += "Content-Type: application/pgp-signature\n\n";
body += signature + "\n";
body += "\n--" + boundary + "--\n";
}
void MailFactory::openPgpSignEncrypt(const QString &text, QString &header, QString &message)
{
QString header_, message_;
openPgpSign(text, header_, message_);
openPgpEncrypt(header_ + "\n" + message_, header, message);
}
*/
void MailFactory::genMail(QString &header, QString &message, SendMail &smail, QWidget *parent)
{