diff options
Diffstat (limited to 'korganizer/komailclient.cpp')
-rw-r--r-- | korganizer/komailclient.cpp | 111 |
1 files changed, 87 insertions, 24 deletions
diff --git a/korganizer/komailclient.cpp b/korganizer/komailclient.cpp index 946331fde..1b3215c09 100644 --- a/korganizer/komailclient.cpp +++ b/korganizer/komailclient.cpp @@ -34,12 +34,18 @@ #include <dcopclient.h> #include <kprocess.h> +#include <libemailfunctions/email.h> + +#include <libkpimidentities/identity.h> +#include <libkpimidentities/identitymanager.h> + #include <libkcal/event.h> #include <libkcal/todo.h> #include <libkcal/incidenceformatter.h> #include "version.h" #include "koprefs.h" +#include "kocore.h" #include "komailclient.h" @@ -54,23 +60,59 @@ KOMailClient::~KOMailClient() bool KOMailClient::mailAttendees(IncidenceBase *incidence,const TQString &attachment) { Attendee::List attendees = incidence->attendees(); - if (attendees.count() == 0) return false; + if ( attendees.count() == 0 ) { + return false; + } const TQString from = incidence->organizer().fullName(); const TQString organizerEmail = incidence->organizer().email(); + TQStringList toList; - for(uint i=0; i<attendees.count();++i) { - const TQString email = (*attendees.at(i))->email(); - // In case we (as one of our identities) are the organizer we are sending this - // mail. We could also have added ourselves as an attendee, in which case we - // don't want to send ourselves a notification mail. - if( organizerEmail != email ) - toList << email; + TQStringList ccList; + for ( uint i=0; i<attendees.count(); ++i ) { + Attendee *a = (*attendees.at(i)); + + const TQString email = a->email(); + if ( email.isEmpty() ) { + continue; + } + + // In case we (as one of our identities) are the organizer we are sending + // this mail. We could also have added ourselves as an attendee, in which + // case we don't want to send ourselves a notification mail. + if ( organizerEmail == email ) { + continue; + } + + // Build a nice address for this attendee including the CN. + TQString tname, temail; + const TQString username = KPIM::quoteNameIfNecessary( a->name() ); + KPIM::getNameAndMail( username, tname, temail ); // ignore return value + // which is always false + tname += " <" + email + '>'; + + + // Optional Participants and Non-Participants are copied on the email + if ( a->role() == Attendee::OptParticipant || + a->role() == Attendee::NonParticipant ) { + ccList << tname; + } else { + toList << tname; + } } - if( toList.count() == 0 ) + + if( toList.count() == 0 && ccList.count() == 0 ) { // Not really to be called a groupware meeting, eh return false; - TQString to = toList.join( ", " ); + } + TQString to; + if ( toList.count() > 0 ) { + to = toList.join( ", " ); + } + TQString cc; + if ( ccList.count() > 0 ) { + cc = ccList.join( ", " ); + } TQString subject; if(incidence->type()!="FreeBusy") { @@ -84,7 +126,7 @@ bool KOMailClient::mailAttendees(IncidenceBase *incidence,const TQString &attach bool bcc = KOPrefs::instance()->mBcc; - return send(from,to,subject,body,bcc,attachment); + return send(from,to,cc,subject,body,bcc,attachment); } bool KOMailClient::mailOrganizer(IncidenceBase *incidence,const TQString &attachment, const TQString &sub) @@ -106,7 +148,7 @@ bool KOMailClient::mailOrganizer(IncidenceBase *incidence,const TQString &attach bool bcc = KOPrefs::instance()->mBcc; - return send(from,to,subject,body,bcc,attachment); + return send(from,to,TQString::null,subject,body,bcc,attachment); } bool KOMailClient::mailTo(IncidenceBase *incidence,const TQString &recipients, @@ -123,16 +165,25 @@ bool KOMailClient::mailTo(IncidenceBase *incidence,const TQString &recipients, TQString body = IncidenceFormatter::mailBodyString(incidence); bool bcc = KOPrefs::instance()->mBcc; kdDebug () << "KOMailClient::mailTo " << recipients << endl; - return send(from,recipients,subject,body,bcc,attachment); + return send(from,recipients,TQString::null,subject,body,bcc,attachment); } -bool KOMailClient::send(const TQString &from,const TQString &to, +bool KOMailClient::send(const TQString &from,const TQString &_to,const TQString &cc, const TQString &subject,const TQString &body,bool bcc, const TQString &attachment) { - kdDebug(5850) << "KOMailClient::sendMail():\nFrom: " << from << "\nTo: " << to - << "\nSubject: " << subject << "\nBody: \n" << body - << "\nAttachment:\n" << attachment << endl; + // We must have a recipients list for most MUAs. Thus, if the 'to' list + // is empty simply use the 'from' address as the recipient. + TQString to = _to; + if ( to.isEmpty() ) { + to = from; + } + + kdDebug(5850) << "KOMailClient::sendMail():\nFrom: " << from + << "\nTo: " << to + << "\nCC: " << cc + << "\nSubject: " << subject << "\nBody: \n" << body + << "\nAttachment:\n" << attachment << endl; if (KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail) { bool needHeaders = true; @@ -152,6 +203,11 @@ bool KOMailClient::send(const TQString &from,const TQString &to, command.append(KProcess::quote(from)); } + if ( !cc.isEmpty() ) { + command.append(" -c "); + command.append(KProcess::quote(cc)); + } + command.append(" "); command.append(KProcess::quote(to)); @@ -170,6 +226,9 @@ bool KOMailClient::send(const TQString &from,const TQString &to, { textComplete += TQString::fromLatin1("From: ") + from + '\n'; textComplete += TQString::fromLatin1("To: ") + to + '\n'; + if ( !cc.isEmpty() ) { + textComplete += TQString::fromLatin1("Cc: " ) + cc + '\n'; + } if (bcc) textComplete += TQString::fromLatin1("Bcc: ") + from + '\n'; textComplete += TQString::fromLatin1("Subject: ") + subject + '\n'; textComplete += TQString::fromLatin1("X-Mailer: KOrganizer") + korgVersion + '\n'; @@ -184,14 +243,14 @@ bool KOMailClient::send(const TQString &from,const TQString &to, pclose(fd); } else { if (!kapp->dcopClient()->isApplicationRegistered("kmail")) { - if (KApplication::startServiceByDesktopName("kmail")) { + if (KApplication::startServiceByDesktopName("kmail")) { KMessageBox::error(0,i18n("No running instance of KMail found.")); return false; - } + } } if (attachment.isEmpty()) { - if (!kMailOpenComposer(to,"",bcc ? from : "",subject,body,0,KURL())) return false; + if (!kMailOpenComposer(to,cc,bcc ? from : "",subject,body,0,KURL())) return false; } else { TQString meth; int idx = attachment.find("METHOD"); @@ -203,9 +262,12 @@ bool KOMailClient::send(const TQString &from,const TQString &to, } else { meth = "publish"; } - if (!kMailOpenComposer(to,"",bcc ? from : "",subject,body,0,"cal.ics","7bit", + if (!kMailOpenComposer(to,cc,bcc ? from : "",subject,body,0,"cal.ics","7bit", attachment.utf8(),"text","calendar","method",meth, - "attachment","utf-8")) return false; + "attachment","utf-8", + KOCore::self()->identityManager()->identityForAddress( from ).uoid())) { + return false; + } } } return true; @@ -252,7 +314,7 @@ int KOMailClient::kMailOpenComposer( const TQString& arg0, const TQString& arg1, const TQCString& arg7, const TQCString& arg8, const TQCString& arg9, const TQCString& arg10, const TQCString& arg11, const TQString& arg12, - const TQCString& arg13, const TQCString& arg14 ) + const TQCString& arg13, const TQCString& arg14, uint identity ) { //kdDebug(5850) << "KOMailClient::kMailOpenComposer( " // << arg0 << " , " << arg1 << arg2 << " , " << arg3 @@ -281,11 +343,12 @@ int KOMailClient::kMailOpenComposer( const TQString& arg0, const TQString& arg1, arg << arg12; arg << arg13; arg << arg14; + arg << identity; #if KDE_IS_VERSION( 3, 2, 90 ) kapp->updateRemoteUserTimestamp("kmail"); #endif if ( kapp->dcopClient()->call("kmail","KMailIface", - "openComposer(TQString,TQString,TQString,TQString,TQString,int,TQString,TQCString,TQCString,TQCString,TQCString,TQCString,TQString,TQCString,TQCString)", data, replyType, replyData ) ) { + "openComposer(TQString,TQString,TQString,TQString,TQString,int,TQString,TQCString,TQCString,TQCString,TQCString,TQCString,TQString,TQCString,TQCString,uint)", data, replyType, replyData ) ) { if ( replyType == "int" ) { TQDataStream _reply_stream( replyData, IO_ReadOnly ); _reply_stream >> result; |