-rw-r--r-- | noncore/unsupported/mail2/TODO | 5 | ||||
-rw-r--r-- | noncore/unsupported/mail2/composer.cpp | 2 | ||||
-rw-r--r-- | noncore/unsupported/mail2/libmail/mailfactory.cpp | 2 |
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 @@ | |||
1 | LISAmail TODO | 1 | Mail TODO |
2 | ----------------------------------------------------------------------------- | 2 | ----------------------------------------------------------------------------- |
3 | 3 | ||
4 | General stuff: | 4 | General stuff: |
5 | - This program needs a name! | ||
5 | - If password is empty, ask for it during fetch. | 6 | - If password is empty, ask for it during fetch. |
6 | - Check if all necessary fields in AccoundEditor are filled. | 7 | - Check if all necessary fields in AccoundEditor are filled. |
7 | 8 | ||
8 | Protocol related: | 9 | Protocol related: |
9 | - The IMAP implentation is kinda strange and slow. | 10 | - The IMAP implentation is kinda strange and slow. |
10 | - The SMTP implentation is goddamn strange. | 11 | - The SMTP implentation is goddamn strange. |
11 | - POP3 support would be nice. | 12 | - POP3 support would be nice. |
12 | - NNTP would be kinda neat, too. | 13 | - NNTP would be kinda neat, too. |
13 | - Implent a plugin system. | 14 | - Implent a plugin system. |
14 | 15 | ||
15 | Security related: | 16 | Security related: |
16 | - GnuPG support. This will require a seperate gpg managing utility in | 17 | - GnuPG support. This will require a seperate gpg managing utility in |
17 | the settings tab. | 18 | the settings tab. |
18 | - sMIME? maybe in the distant future. | 19 | - sMIME? maybe in the distant future. |
19 | 20 | ||
20 | Mail management: | 21 | Mail management: |
21 | - Header caching | 22 | - Header caching |
22 | - Sieve filtering support? | 23 | - Sieve filtering support? |
23 | - Enqueueing/Draft support both on the IMAP server and local. | 24 | - Enqueueing/Draft support both on the IMAP server and local. |
24 | 25 | ||
25 | Testing: | 26 | Testing: |
26 | I'm using the courier-imap server at my developement site. I didn't have | 27 | I'm using the courier-imap server at my developement site. I didn't have |
27 | much opportunity to test on other servers. Giving me test-accounts on other | 28 | much opportunity to test on other servers. Giving me test-accounts on other |
28 | servers would be helpfull. | 29 | servers would be helpfull. |
29 | 30 | ||
30 | If you want something added, drop a mail. Comments are allways welcome. | 31 | If you want something added, drop a mail. Comments are always welcome. |
31 | 32 | ||
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 | |||
@@ -108,64 +108,66 @@ void Composer::slotSendMail() | |||
108 | smail.setPriority("Normal");// No i18n on purpose | 108 | smail.setPriority("Normal");// No i18n on purpose |
109 | } else if (priority->currentItem() == POPUP_PRIO_HIGH) { | 109 | } else if (priority->currentItem() == POPUP_PRIO_HIGH) { |
110 | smail.setPriority("High");// No i18n on purpose | 110 | smail.setPriority("High");// No i18n on purpose |
111 | } | 111 | } |
112 | 112 | ||
113 | QValueList<Attachment> attachments; | 113 | QValueList<Attachment> attachments; |
114 | QListViewItem *item; | 114 | QListViewItem *item; |
115 | for (item = attachView->firstChild(); item != 0; item = item->itemBelow()) { | 115 | for (item = attachView->firstChild(); item != 0; item = item->itemBelow()) { |
116 | attachments.append(((AttachViewItem *)item)->attachment()); | 116 | attachments.append(((AttachViewItem *)item)->attachment()); |
117 | } | 117 | } |
118 | 118 | ||
119 | smail.setAttachments(attachments); | 119 | smail.setAttachments(attachments); |
120 | 120 | ||
121 | QString header, message; | 121 | QString header, message; |
122 | MailFactory::genMail(header, message, smail, this); | 122 | MailFactory::genMail(header, message, smail, this); |
123 | 123 | ||
124 | abort->setEnabled(true); | 124 | abort->setEnabled(true); |
125 | 125 | ||
126 | SmtpHandler *handler = new SmtpHandler(header, message, accountsLoaded[from->currentItem()], to->text()); | 126 | SmtpHandler *handler = new SmtpHandler(header, message, accountsLoaded[from->currentItem()], to->text()); |
127 | connect(handler, SIGNAL(finished()), SLOT(slotSendFinished())); | 127 | connect(handler, SIGNAL(finished()), SLOT(slotSendFinished())); |
128 | connect(handler, SIGNAL(error(const QString &)), SLOT(slotSendError(const QString &))); | 128 | connect(handler, SIGNAL(error(const QString &)), SLOT(slotSendError(const QString &))); |
129 | connect(handler, SIGNAL(status(const QString &)), status, SLOT(setText(const QString &))); | 129 | connect(handler, SIGNAL(status(const QString &)), status, SLOT(setText(const QString &))); |
130 | } | 130 | } |
131 | 131 | ||
132 | void Composer::slotSendError(const QString &error) | 132 | void Composer::slotSendError(const QString &error) |
133 | { | 133 | { |
134 | status->setText(tr("<font color=#ff0000>Error occoured during sending.</font>")); | 134 | status->setText(tr("<font color=#ff0000>Error occoured during sending.</font>")); |
135 | QMessageBox::warning(this, tr("Error"), tr("<p>%1</p").arg(error), tr("Ok")); | 135 | QMessageBox::warning(this, tr("Error"), tr("<p>%1</p").arg(error), tr("Ok")); |
136 | } | 136 | } |
137 | 137 | ||
138 | void Composer::slotSendFinished() | 138 | void Composer::slotSendFinished() |
139 | { | 139 | { |
140 | QMessageBox::information(this, tr("Success"), tr("<p>The mail was sent successfully.</p>"), tr("Ok")); | ||
141 | |||
140 | status->setText(QString(0)); | 142 | status->setText(QString(0)); |
141 | abort->setEnabled(false); | 143 | abort->setEnabled(false); |
142 | } | 144 | } |
143 | 145 | ||
144 | void Composer::slotFillStuff() | 146 | void Composer::slotFillStuff() |
145 | { | 147 | { |
146 | QValueList<Account> accounts = ConfigFile::getAccounts(); | 148 | QValueList<Account> accounts = ConfigFile::getAccounts(); |
147 | int i = 0; | 149 | int i = 0; |
148 | 150 | ||
149 | QValueList<Account>::Iterator it; | 151 | QValueList<Account>::Iterator it; |
150 | for (it = accounts.begin(); it != accounts.end(); it++) { | 152 | for (it = accounts.begin(); it != accounts.end(); it++) { |
151 | if (!(*it).email().isEmpty() && !(*it).smtpServer().isEmpty() && !(*it).smtpPort().isEmpty()) { | 153 | if (!(*it).email().isEmpty() && !(*it).smtpServer().isEmpty() && !(*it).smtpPort().isEmpty()) { |
152 | if (!(*it).realName().isEmpty()) | 154 | if (!(*it).realName().isEmpty()) |
153 | from->insertItem((*it).realName() + " <" + (*it).email() + ">", i); | 155 | from->insertItem((*it).realName() + " <" + (*it).email() + ">", i); |
154 | else | 156 | else |
155 | from->insertItem((*it).email()); | 157 | from->insertItem((*it).email()); |
156 | 158 | ||
157 | accountsLoaded.append(*it); | 159 | accountsLoaded.append(*it); |
158 | i++; | 160 | i++; |
159 | } | 161 | } |
160 | } | 162 | } |
161 | } | 163 | } |
162 | 164 | ||
163 | void Composer::slotFromChanged(int id) | 165 | void Composer::slotFromChanged(int id) |
164 | { | 166 | { |
165 | Account account = accountsLoaded[id]; | 167 | Account account = accountsLoaded[id]; |
166 | 168 | ||
167 | if (account.defaultCc()) cc->setText(account.cc()); | 169 | if (account.defaultCc()) cc->setText(account.cc()); |
168 | if (account.defaultBcc()) bcc->setText(account.bcc()); | 170 | if (account.defaultBcc()) bcc->setText(account.bcc()); |
169 | if (account.defaultReplyTo()) replyto->setText(account.replyTo()); | 171 | if (account.defaultReplyTo()) replyto->setText(account.replyTo()); |
170 | if (!account.signature().isEmpty()) | 172 | if (!account.signature().isEmpty()) |
171 | message->setText(message->text() + "\n\n-- \n" + account.signature()); | 173 | message->setText(message->text() + "\n\n-- \n" + account.signature()); |
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 | |||
@@ -71,65 +71,65 @@ MailFactory::MailFactory(SendMail &smail, QWidget *parent) | |||
71 | // _body += header + "\n" + body + "\n"; | 71 | // _body += header + "\n" + body + "\n"; |
72 | // } else { | 72 | // } else { |
73 | 73 | ||
74 | // TODO: Do proper charset handling! | 74 | // TODO: Do proper charset handling! |
75 | _body += "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; | 75 | _body += "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; |
76 | _body += "Content-Transfer-Encoding: 8bit\n\n"; | 76 | _body += "Content-Transfer-Encoding: 8bit\n\n"; |
77 | _body += _smail.message() + "\n"; | 77 | _body += _smail.message() + "\n"; |
78 | // } | 78 | // } |
79 | 79 | ||
80 | QValueList<Attachment> attachments = _smail.attachments(); | 80 | QValueList<Attachment> attachments = _smail.attachments(); |
81 | QValueList<Attachment>::Iterator it; | 81 | QValueList<Attachment>::Iterator it; |
82 | for (it = attachments.begin(); it != attachments.end(); it++) { | 82 | for (it = attachments.begin(); it != attachments.end(); it++) { |
83 | QFile f((*it).fileName()); | 83 | QFile f((*it).fileName()); |
84 | if (f.open(IO_ReadOnly)) { | 84 | if (f.open(IO_ReadOnly)) { |
85 | QTextStream t(&f); | 85 | QTextStream t(&f); |
86 | QString file; | 86 | QString file; |
87 | while (!t.atEnd()) file += t.readLine() + "\n"; | 87 | while (!t.atEnd()) file += t.readLine() + "\n"; |
88 | f.close(); | 88 | f.close(); |
89 | QString mimetype = (new MimeType(*(*it).docLnk()))->id(); | 89 | QString mimetype = (new MimeType(*(*it).docLnk()))->id(); |
90 | 90 | ||
91 | _body += "\n--" + boundary + "\n"; | 91 | _body += "\n--" + boundary + "\n"; |
92 | _body += "Content-Type: " + mimetype + "; name=\"" + (*it).newName() + "\"\n"; | 92 | _body += "Content-Type: " + mimetype + "; name=\"" + (*it).newName() + "\"\n"; |
93 | 93 | ||
94 | // TODO: Decide which content transfer encoding is best. B64 for binary, QP for text. | 94 | // TODO: Decide which content transfer encoding is best. B64 for binary, QP for text. |
95 | _body += "Content-Transfer-Encoding: base64\n"; | 95 | _body += "Content-Transfer-Encoding: base64\n"; |
96 | 96 | ||
97 | _body += "Content-Disposition: attachment; filename=\"" + (*it).newName() + "\"\n"; | 97 | _body += "Content-Disposition: attachment; filename=\"" + (*it).newName() + "\"\n"; |
98 | if (!(*it).description().isEmpty()) | 98 | if (!(*it).description().isEmpty()) |
99 | _body += "Content-Description: " + (*it).description() + "\n"; | 99 | _body += "Content-Description: " + (*it).description() + "\n"; |
100 | 100 | ||
101 | _body += "\n" + MiscFunctions::encodeBase64(file) + "\n"; | 101 | _body += "\n" + MiscFunctions::encodeBase64(file) + "\n"; |
102 | } else { | 102 | } else { |
103 | int ret = QMessageBox::critical(_parent, tr("Error"), tr("<p>Couldn't attach file '%1'. Continue anyway or abort?</p>"), tr("Continue"), tr("Abort")); | 103 | 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")); |
104 | if (ret == 1) { | 104 | if (ret == 1) { |
105 | it = attachments.end(); | 105 | it = attachments.end(); |
106 | _abort = true; | 106 | _abort = true; |
107 | } | 107 | } |
108 | } | 108 | } |
109 | } | 109 | } |
110 | _body += "\n--" + boundary + "--"; | 110 | _body += "\n--" + boundary + "--"; |
111 | } | 111 | } |
112 | 112 | ||
113 | if (_abort) { | 113 | if (_abort) { |
114 | _body = QString(0); | 114 | _body = QString(0); |
115 | _header = QString(0); | 115 | _header = QString(0); |
116 | } | 116 | } |
117 | } | 117 | } |
118 | 118 | ||
119 | // Unfinished GPG code. | 119 | // Unfinished GPG code. |
120 | /* | 120 | /* |
121 | void MailFactory::openPgpEncrypt(const QString &text, QString &header, QString &body) | 121 | void MailFactory::openPgpEncrypt(const QString &text, QString &header, QString &body) |
122 | { | 122 | { |
123 | QString boundary = MiscFunctions::uniqueString(); | 123 | QString boundary = MiscFunctions::uniqueString(); |
124 | 124 | ||
125 | header += "Content-Type: multipart/encrypted; boundary=\"" + boundary + "\"; protocol=\"application/pgp-encrypted\"\n"; | 125 | header += "Content-Type: multipart/encrypted; boundary=\"" + boundary + "\"; protocol=\"application/pgp-encrypted\"\n"; |
126 | 126 | ||
127 | body += "--" + boundary + "\n"; | 127 | body += "--" + boundary + "\n"; |
128 | body += "Content-Type: application/pgp-encrypted\n\n"; | 128 | body += "Content-Type: application/pgp-encrypted\n\n"; |
129 | body += "Version: 1\n\n"; | 129 | body += "Version: 1\n\n"; |
130 | body += "--" + boundary + "\n"; | 130 | body += "--" + boundary + "\n"; |
131 | body += "Content-Type: application/octet-stream\n\n"; | 131 | body += "Content-Type: application/octet-stream\n\n"; |
132 | body += GpgHandling::encrypt(_smail.gpgReceivers(), text); | 132 | body += GpgHandling::encrypt(_smail.gpgReceivers(), text); |
133 | body += "\n--" + boundary + "--\n"; | 133 | body += "\n--" + boundary + "--\n"; |
134 | } | 134 | } |
135 | 135 | ||