summaryrefslogtreecommitdiff
Unidiff
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 @@
1LISAmail TODO 1Mail TODO
2----------------------------------------------------------------------------- 2-----------------------------------------------------------------------------
3 3
4General stuff: 4General 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
8Protocol related: 9Protocol 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
15Security related: 16Security 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
20Mail management: 21Mail 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
25Testing: 26Testing:
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
30If you want something added, drop a mail. Comments are allways welcome. 31If 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
46void Composer::setSendMail(SendMail &sendMail) 46void 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
63void Composer::slotResizing() 63void 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
69void Composer::slotPopupHandler(int itemid) 69void 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
87void Composer::slotSendMail() 87void 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
132void Composer::slotSendError(const QString &error) 132void 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
138void Composer::slotSendFinished() 138void 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
144void Composer::slotFillStuff() 146void 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
163void Composer::slotFromChanged(int id) 165void 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
174void Composer::slotOpenAddressPicker() 176void 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
197void Composer::slotAddAttach() 199void 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
210void Composer::slotDelAttach() 212void 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
11MailFactory::MailFactory(SendMail &smail, QWidget *parent) 11MailFactory::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/*
121void MailFactory::openPgpEncrypt(const QString &text, QString &header, QString &body) 121void 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
136void MailFactory::openPgpSign(const QString &text, QString &header, QString &body) 136void 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
159void MailFactory::openPgpSignEncrypt(const QString &text, QString &header, QString &message) 159void 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*/
166void MailFactory::genMail(QString &header, QString &message, SendMail &smail, QWidget *parent) 166void 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