author | conber <conber> | 2002-06-15 20:16:02 (UTC) |
---|---|---|
committer | conber <conber> | 2002-06-15 20:16:02 (UTC) |
commit | e782feb7418fbf956547b9abb59afdde00745442 (patch) (unidiff) | |
tree | 2eec1348e7d13c7b7f6db8e5d377cea0403ee43e | |
parent | b15f8a613d83a2f3957fef515e20981f636b908b (diff) | |
download | opie-e782feb7418fbf956547b9abb59afdde00745442.zip opie-e782feb7418fbf956547b9abb59afdde00745442.tar.gz opie-e782feb7418fbf956547b9abb59afdde00745442.tar.bz2 |
added message box
-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 | |||
@@ -44,172 +44,174 @@ Composer::Composer(QWidget *parent, const char *name, WFlags fl) | |||
44 | } | 44 | } |
45 | 45 | ||
46 | void Composer::setSendMail(SendMail &sendMail) | 46 | void Composer::setSendMail(SendMail &sendMail) |
47 | { | 47 | { |
48 | to->setText(sendMail.to()); | 48 | to->setText(sendMail.to()); |
49 | cc->setText(sendMail.cc()); | 49 | cc->setText(sendMail.cc()); |
50 | bcc->setText(sendMail.bcc()); | 50 | bcc->setText(sendMail.bcc()); |
51 | subject->setText(sendMail.subject()); | 51 | subject->setText(sendMail.subject()); |
52 | message->setText(sendMail.message()); | 52 | message->setText(sendMail.message()); |
53 | _inReplyTo = sendMail.inReplyTo(); | 53 | _inReplyTo = sendMail.inReplyTo(); |
54 | 54 | ||
55 | QValueList<Attachment> attachments = sendMail.attachments(); | 55 | QValueList<Attachment> attachments = sendMail.attachments(); |
56 | QValueList<Attachment>::Iterator it; | 56 | QValueList<Attachment>::Iterator it; |
57 | for (it = attachments.begin(); it != attachments.end(); it++) { | 57 | for (it = attachments.begin(); it != attachments.end(); it++) { |
58 | (void) new AttachViewItem(attachView, *it); | 58 | (void) new AttachViewItem(attachView, *it); |
59 | if (attachView->isHidden()) attachView->show(); | 59 | if (attachView->isHidden()) attachView->show(); |
60 | } | 60 | } |
61 | } | 61 | } |
62 | 62 | ||
63 | void Composer::slotResizing() | 63 | void Composer::slotResizing() |
64 | { | 64 | { |
65 | from->setMaximumWidth(width() - fromBox->width()); | 65 | from->setMaximumWidth(width() - fromBox->width()); |
66 | from->resize(width() - fromBox->width(), y()); | 66 | from->resize(width() - fromBox->width(), y()); |
67 | } | 67 | } |
68 | 68 | ||
69 | void Composer::slotPopupHandler(int itemid) | 69 | void Composer::slotPopupHandler(int itemid) |
70 | { | 70 | { |
71 | if (attachView->currentItem() == NULL) { | 71 | if (attachView->currentItem() == NULL) { |
72 | QMessageBox::information(this, tr("Error"), tr("Please select an entry first."), tr("Ok")); | 72 | QMessageBox::information(this, tr("Error"), tr("Please select an entry first."), tr("Ok")); |
73 | return; | 73 | return; |
74 | } | 74 | } |
75 | 75 | ||
76 | if (itemid == POPUP_ATTACH_RENAME) { | 76 | if (itemid == POPUP_ATTACH_RENAME) { |
77 | QString tmp = Rename::rename(attachView->currentItem()->text(0), this); | 77 | QString tmp = Rename::rename(attachView->currentItem()->text(0), this); |
78 | if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp); | 78 | if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp); |
79 | } else if (itemid == POPUP_ATTACH_DESC) { | 79 | } else if (itemid == POPUP_ATTACH_DESC) { |
80 | QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this); | 80 | QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this); |
81 | if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp); | 81 | if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp); |
82 | } else if (itemid == POPUP_ATTACH_REMOVE) { | 82 | } else if (itemid == POPUP_ATTACH_REMOVE) { |
83 | attachView->takeItem(attachView->currentItem()); | 83 | attachView->takeItem(attachView->currentItem()); |
84 | } | 84 | } |
85 | } | 85 | } |
86 | 86 | ||
87 | void Composer::slotSendMail() | 87 | void Composer::slotSendMail() |
88 | { | 88 | { |
89 | if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) { | 89 | if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) { |
90 | QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok")); | 90 | QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok")); |
91 | return; | 91 | return; |
92 | } | 92 | } |
93 | 93 | ||
94 | SendMail smail; | 94 | SendMail smail; |
95 | smail.setFrom(from->currentText()); | 95 | smail.setFrom(from->currentText()); |
96 | smail.setReplyTo(replyto->text()); | 96 | smail.setReplyTo(replyto->text()); |
97 | smail.setTo(to->text()); | 97 | smail.setTo(to->text()); |
98 | smail.setCc(cc->text()); | 98 | smail.setCc(cc->text()); |
99 | smail.setBcc(bcc->text()); | 99 | smail.setBcc(bcc->text()); |
100 | smail.setSubject(subject->text()); | 100 | smail.setSubject(subject->text()); |
101 | smail.setMessage(message->text()); | 101 | smail.setMessage(message->text()); |
102 | smail.setNeedsMime(attachView->childCount() == 0 ? false : true); | 102 | smail.setNeedsMime(attachView->childCount() == 0 ? false : true); |
103 | smail.setAccount(accountsLoaded[from->currentItem()]); | 103 | smail.setAccount(accountsLoaded[from->currentItem()]); |
104 | 104 | ||
105 | if (priority->currentItem() == POPUP_PRIO_LOW) { | 105 | if (priority->currentItem() == POPUP_PRIO_LOW) { |
106 | smail.setPriority("Low");// No i18n on purpose | 106 | smail.setPriority("Low");// No i18n on purpose |
107 | } else if (priority->currentItem() == POPUP_PRIO_NORMAL) { | 107 | } else if (priority->currentItem() == POPUP_PRIO_NORMAL) { |
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()); |
172 | } | 174 | } |
173 | 175 | ||
174 | void Composer::slotOpenAddressPicker() | 176 | void Composer::slotOpenAddressPicker() |
175 | { | 177 | { |
176 | if (!to->isHidden() && cc->isHidden() && bcc->isHidden()) { | 178 | if (!to->isHidden() && cc->isHidden() && bcc->isHidden()) { |
177 | if (to->text().isEmpty()) { | 179 | if (to->text().isEmpty()) { |
178 | to->setText(AddressPicker::getNames()); | 180 | to->setText(AddressPicker::getNames()); |
179 | } else { | 181 | } else { |
180 | to->setText(to->text() + ", " + AddressPicker::getNames()); | 182 | to->setText(to->text() + ", " + AddressPicker::getNames()); |
181 | } | 183 | } |
182 | } else if (to->isHidden() && !cc->isHidden() && bcc->isHidden()) { | 184 | } else if (to->isHidden() && !cc->isHidden() && bcc->isHidden()) { |
183 | if (cc->text().isEmpty()) { | 185 | if (cc->text().isEmpty()) { |
184 | cc->setText(AddressPicker::getNames()); | 186 | cc->setText(AddressPicker::getNames()); |
185 | } else { | 187 | } else { |
186 | cc->setText(cc->text() + ", " + AddressPicker::getNames()); | 188 | cc->setText(cc->text() + ", " + AddressPicker::getNames()); |
187 | } | 189 | } |
188 | } else if (to->isHidden() && cc->isHidden() && !bcc->isHidden()) { | 190 | } else if (to->isHidden() && cc->isHidden() && !bcc->isHidden()) { |
189 | if (bcc->text().isEmpty()) { | 191 | if (bcc->text().isEmpty()) { |
190 | bcc->setText(AddressPicker::getNames()); | 192 | bcc->setText(AddressPicker::getNames()); |
191 | } else { | 193 | } else { |
192 | bcc->setText(bcc->text() + ", " + AddressPicker::getNames()); | 194 | bcc->setText(bcc->text() + ", " + AddressPicker::getNames()); |
193 | } | 195 | } |
194 | } | 196 | } |
195 | } | 197 | } |
196 | 198 | ||
197 | void Composer::slotAddAttach() | 199 | void Composer::slotAddAttach() |
198 | { | 200 | { |
199 | DocLnk lnk = AttachDiag::getFile(); | 201 | DocLnk lnk = AttachDiag::getFile(); |
200 | if (lnk.name().isEmpty()) return; | 202 | if (lnk.name().isEmpty()) return; |
201 | 203 | ||
202 | Attachment attachment; | 204 | Attachment attachment; |
203 | attachment.setFileName(lnk.file()); | 205 | attachment.setFileName(lnk.file()); |
204 | attachment.setNewName(lnk.name()); | 206 | attachment.setNewName(lnk.name()); |
205 | attachment.setDocLnk(&lnk); | 207 | attachment.setDocLnk(&lnk); |
206 | 208 | ||
207 | (void) new AttachViewItem(attachView, attachment); | 209 | (void) new AttachViewItem(attachView, attachment); |
208 | } | 210 | } |
209 | 211 | ||
210 | void Composer::slotDelAttach() | 212 | void Composer::slotDelAttach() |
211 | { | 213 | { |
212 | if (attachView->currentItem() == NULL) return; | 214 | if (attachView->currentItem() == NULL) return; |
213 | attachView->takeItem(attachView->currentItem()); | 215 | attachView->takeItem(attachView->currentItem()); |
214 | } | 216 | } |
215 | 217 | ||
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 | |||
@@ -7,167 +7,167 @@ | |||
7 | #include "miscfunctions.h" | 7 | #include "miscfunctions.h" |
8 | #include "mailfactory.h" | 8 | #include "mailfactory.h" |
9 | #include "defines.h" | 9 | #include "defines.h" |
10 | 10 | ||
11 | MailFactory::MailFactory(SendMail &smail, QWidget *parent) | 11 | MailFactory::MailFactory(SendMail &smail, QWidget *parent) |
12 | : QObject(), _smail(smail), _parent(parent) | 12 | : QObject(), _smail(smail), _parent(parent) |
13 | { | 13 | { |
14 | _abort = false; | 14 | _abort = false; |
15 | Account account = _smail.account(); | 15 | Account account = _smail.account(); |
16 | 16 | ||
17 | if (!_smail.from().isEmpty()) | 17 | if (!_smail.from().isEmpty()) |
18 | _header += "From: " + _smail.from() + "\n"; | 18 | _header += "From: " + _smail.from() + "\n"; |
19 | if (!_smail.replyTo().isEmpty()) | 19 | if (!_smail.replyTo().isEmpty()) |
20 | _header += "Reply-To: " + _smail.replyTo() + "\n"; | 20 | _header += "Reply-To: " + _smail.replyTo() + "\n"; |
21 | if (!_smail.to().isEmpty()) | 21 | if (!_smail.to().isEmpty()) |
22 | _header += "To: " + _smail.to() + "\n"; | 22 | _header += "To: " + _smail.to() + "\n"; |
23 | if (!_smail.cc().isEmpty()) | 23 | if (!_smail.cc().isEmpty()) |
24 | _header += "Cc: " + _smail.cc() + "\n"; | 24 | _header += "Cc: " + _smail.cc() + "\n"; |
25 | if (!_smail.bcc().isEmpty()) | 25 | if (!_smail.bcc().isEmpty()) |
26 | _header += "Bcc: " + _smail.bcc() + "\n"; | 26 | _header += "Bcc: " + _smail.bcc() + "\n"; |
27 | if (!_smail.subject().isEmpty()) | 27 | if (!_smail.subject().isEmpty()) |
28 | _header += "Subject: " + _smail.subject() + "\n"; | 28 | _header += "Subject: " + _smail.subject() + "\n"; |
29 | if (!_smail.priority().isEmpty() || (_smail.priority() != "Normal")) | 29 | if (!_smail.priority().isEmpty() || (_smail.priority() != "Normal")) |
30 | _header += "Priority: " + _smail.priority() + "\n"; | 30 | _header += "Priority: " + _smail.priority() + "\n"; |
31 | _header += "Date: " + MiscFunctions::rfcDate() + "\n"; | 31 | _header += "Date: " + MiscFunctions::rfcDate() + "\n"; |
32 | if (!_smail.account().org().isEmpty()) | 32 | if (!_smail.account().org().isEmpty()) |
33 | _header += "Organization: " + _smail.account().org() + "\n"; | 33 | _header += "Organization: " + _smail.account().org() + "\n"; |
34 | if (_smail.needsMime()) | 34 | if (_smail.needsMime()) |
35 | _header += "Mime-Version: 1.0\n"; | 35 | _header += "Mime-Version: 1.0\n"; |
36 | _header += "Message-Id: <" + MiscFunctions::uniqueString() + "." + account.email() + ">\n"; | 36 | _header += "Message-Id: <" + MiscFunctions::uniqueString() + "." + account.email() + ">\n"; |
37 | if (!_smail.inReplyTo().isEmpty()) | 37 | if (!_smail.inReplyTo().isEmpty()) |
38 | _header += "In-Reply-To: " + _smail.inReplyTo() + "\n"; | 38 | _header += "In-Reply-To: " + _smail.inReplyTo() + "\n"; |
39 | if (!QString((QString) USERAGENT).isEmpty()) | 39 | if (!QString((QString) USERAGENT).isEmpty()) |
40 | _header += (QString) "User-Agent: " + USERAGENT + "\n"; | 40 | _header += (QString) "User-Agent: " + USERAGENT + "\n"; |
41 | 41 | ||
42 | if (!_smail.needsMime()) { | 42 | if (!_smail.needsMime()) { |
43 | // if (_smail.encrypt() && !_smail.sign()) { | 43 | // if (_smail.encrypt() && !_smail.sign()) { |
44 | // openPgpEncrypt(_smail.message(), _header, _body); | 44 | // openPgpEncrypt(_smail.message(), _header, _body); |
45 | // } else if (!_smail.encrypt() && _smail.sign()) { | 45 | // } else if (!_smail.encrypt() && _smail.sign()) { |
46 | // openPgpSign(_smail.message(), _header, _body); | 46 | // openPgpSign(_smail.message(), _header, _body); |
47 | // } else if (_smail.encrypt() && _smail.sign()) { | 47 | // } else if (_smail.encrypt() && _smail.sign()) { |
48 | // openPgpSignEncrypt(_smail.message(), _header, _body); | 48 | // openPgpSignEncrypt(_smail.message(), _header, _body); |
49 | // } else { | 49 | // } else { |
50 | _body += _smail.message(); | 50 | _body += _smail.message(); |
51 | // } | 51 | // } |
52 | } else { | 52 | } else { |
53 | QString boundary = MiscFunctions::uniqueString(); | 53 | QString boundary = MiscFunctions::uniqueString(); |
54 | 54 | ||
55 | _header += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\n"; | 55 | _header += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\n"; |
56 | 56 | ||
57 | _body += "This is a multi-part message in MIME format.\n\n"; | 57 | _body += "This is a multi-part message in MIME format.\n\n"; |
58 | _body += "--" + boundary + "\n"; | 58 | _body += "--" + boundary + "\n"; |
59 | 59 | ||
60 | // if (_smail.encrypt() && !_smail.sign()) { | 60 | // if (_smail.encrypt() && !_smail.sign()) { |
61 | // QString header, body; | 61 | // QString header, body; |
62 | // openPgpEncrypt(_smail.message(), header, body); | 62 | // openPgpEncrypt(_smail.message(), header, body); |
63 | // _body += header + "\n" + body + "\n"; | 63 | // _body += header + "\n" + body + "\n"; |
64 | // } else if (!_smail.encrypt() && _smail.sign()) { | 64 | // } else if (!_smail.encrypt() && _smail.sign()) { |
65 | // QString header, body; | 65 | // QString header, body; |
66 | // openPgpSign(_smail.message(), header, body); | 66 | // openPgpSign(_smail.message(), header, body); |
67 | // _body += header + "\n" + body + "\n"; | 67 | // _body += header + "\n" + body + "\n"; |
68 | // } else if (_smail.encrypt() && _smail.sign()) { | 68 | // } else if (_smail.encrypt() && _smail.sign()) { |
69 | // QString header, body; | 69 | // QString header, body; |
70 | // openPgpSignEncrypt(_smail.message(), header, body); | 70 | // openPgpSignEncrypt(_smail.message(), header, body); |
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 | ||
136 | void MailFactory::openPgpSign(const QString &text, QString &header, QString &body) | 136 | void MailFactory::openPgpSign(const QString &text, QString &header, QString &body) |
137 | { | 137 | { |
138 | QString boundary = MiscFunctions::uniqueString(); | 138 | QString boundary = MiscFunctions::uniqueString(); |
139 | 139 | ||
140 | header += "Content-Type: multipart/signed; boundary=\"" + boundary + "\"; protocol=\"application/pgp-signature\"\n"; | 140 | header += "Content-Type: multipart/signed; boundary=\"" + boundary + "\"; protocol=\"application/pgp-signature\"\n"; |
141 | 141 | ||
142 | body += "--" + boundary + "\n"; | 142 | body += "--" + boundary + "\n"; |
143 | 143 | ||
144 | QString temp; | 144 | QString temp; |
145 | temp += "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; | 145 | temp += "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; |
146 | temp += "Content-Transfer-Encoding: quoted-printable\n\n"; | 146 | temp += "Content-Transfer-Encoding: quoted-printable\n\n"; |
147 | temp += MiscFunctions::encodeQPrintable(text) + "\n"; | 147 | temp += MiscFunctions::encodeQPrintable(text) + "\n"; |
148 | body += temp; | 148 | body += temp; |
149 | 149 | ||
150 | temp.replace(QRegExp("\n"), "\r\n"); | 150 | temp.replace(QRegExp("\n"), "\r\n"); |
151 | QString signature = GpgHandling::sign(temp, _parent); | 151 | QString signature = GpgHandling::sign(temp, _parent); |
152 | 152 | ||
153 | body += "\n--" + boundary + "\n"; | 153 | body += "\n--" + boundary + "\n"; |
154 | body += "Content-Type: application/pgp-signature\n\n"; | 154 | body += "Content-Type: application/pgp-signature\n\n"; |
155 | body += signature + "\n"; | 155 | body += signature + "\n"; |
156 | body += "\n--" + boundary + "--\n"; | 156 | body += "\n--" + boundary + "--\n"; |
157 | } | 157 | } |
158 | 158 | ||
159 | void MailFactory::openPgpSignEncrypt(const QString &text, QString &header, QString &message) | 159 | void MailFactory::openPgpSignEncrypt(const QString &text, QString &header, QString &message) |
160 | { | 160 | { |
161 | QString header_, message_; | 161 | QString header_, message_; |
162 | openPgpSign(text, header_, message_); | 162 | openPgpSign(text, header_, message_); |
163 | openPgpEncrypt(header_ + "\n" + message_, header, message); | 163 | openPgpEncrypt(header_ + "\n" + message_, header, message); |
164 | } | 164 | } |
165 | */ | 165 | */ |
166 | void MailFactory::genMail(QString &header, QString &message, SendMail &smail, QWidget *parent) | 166 | void MailFactory::genMail(QString &header, QString &message, SendMail &smail, QWidget *parent) |
167 | { | 167 | { |
168 | MailFactory factory(smail, parent); | 168 | MailFactory factory(smail, parent); |
169 | 169 | ||
170 | header = factory._header; | 170 | header = factory._header; |
171 | message = factory._body; | 171 | message = factory._body; |
172 | } | 172 | } |
173 | 173 | ||