Summary: | MDNs are not sent | ||
---|---|---|---|
Product: | [Applications] kmail | Reporter: | BORGULYA Gábor <bugs2> |
Component: | general | Assignee: | kdepim bugs <kdepim-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | michael.seiwert |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Gentoo Packages | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Attachments: |
ignore settings and fake headers
ignore settings; fake header fields and remove them later |
Description
BORGULYA Gábor
2004-10-13 17:17:34 UTC
With kmail 1.9.1 the situation is the same. I can confirm this for 1.9.5 as well Would it work if I used sendmail instead of POP and SMTP connections? I have tested it sending from/to Kmail 1.9.5 and 1.9.5+ and kmail asks politely what to do with the MDN request at least for incoming mails, for filter action see next comment. Created attachment 19356 [details]
ignore settings and fake headers
IMHO the send-fake-MDN-message filter action wont work as it is now.
The filter action requires
- MDN mode set to "always", batch mode does not allow to ask user
- Return-Path and Disposition-Notification-To headers must be available
I think if the users installs a filter to send fake messages we can ignore the
MDN setting and assume "always". To be on the save side, this could be an
option.
I guess if we fake the message we can as well fake the header fields
Return-Path and Disposition-Notification-To (this might break some standard,
haven't checked)
Thank you very much, Christian! I don't know how to compile kmail from the subversion repository, so I will wait until it appears in the newest gentoo package. I am looking forward to using the MDN feature! -- Gábor Created attachment 19523 [details]
ignore settings; fake header fields and remove them later
SVN commit 630582 by schaarsc: in KMime::MDN::AutomaticAction mode ignore MDN user settings fake header fields if missing and remove them later. CCBUG:91252 M +18 -0 branches/work/kdepim-3.5.5+/kmail/kmfilteraction.cpp M +23 -20 branches/work/kdepim-3.5.5+/kmail/kmmessage.cpp --- branches/work/kdepim-3.5.5+/kmail/kmfilteraction.cpp #630581:630582 @@ -118,11 +118,29 @@ void KMFilterAction::sendMDN( KMMessage * msg, KMime::MDN::DispositionType d, const QValueList<KMime::MDN::DispositionModifier> & m ) { if ( !msg ) return; + + /* createMDN requires Return-Path and Disposition-Notification-To + * if it is not set in the message we assume that the notification should go to the + * sender + */ + const QString returnPath = msg->headerField( "Return-Path" ); + const QString dispNoteTo = msg->headerField( "Disposition-Notification-To" ); + if ( returnPath.isEmpty() ) + msg->setHeaderField( "Return-Path", msg->from() ); + if ( dispNoteTo.isEmpty() ) + msg->setHeaderField( "Disposition-Notification-To", msg->from() ); + KMMessage * mdn = msg->createMDN( KMime::MDN::AutomaticAction, d, false, m ); if ( mdn && !kmkernel->msgSender()->send( mdn, KMail::MessageSender::SendLater ) ) { kdDebug(5006) << "KMFilterAction::sendMDN(): sending failed." << endl; //delete mdn; } + + //restore orignial header + if ( returnPath.isEmpty() ) + msg->removeHeaderField( "Return-Path" ); + if ( dispNoteTo.isEmpty() ) + msg->removeHeaderField( "Disposition-Notification-To" ); } --- branches/work/kdepim-3.5.5+/kmail/kmmessage.cpp #630581:630582 @@ -1465,27 +1465,30 @@ s = MDN::SentManually; } - if ( mode == 1 ) { // ask - if ( !allowGUI ) return 0; // don't setMDNSentState here! - mode = requestAdviceOnMDN( "mdnNormalAsk" ); - s = MDN::SentManually; // asked user - } + if ( a != KMime::MDN::AutomaticAction ) { + //TODO: only ingore user settings for AutomaticAction if requested + if ( mode == 1 ) { // ask + if ( !allowGUI ) return 0; // don't setMDNSentState here! + mode = requestAdviceOnMDN( "mdnNormalAsk" ); + s = MDN::SentManually; // asked user + } - switch ( mode ) { - case 0: // ignore: - setMDNSentState( KMMsgMDNIgnore ); - return 0; - default: - case 1: - kdFatal(5006) << "KMMessage::createMDN(): The \"ask\" mode should " - << "never appear here!" << endl; - break; - case 2: // deny - d = MDN::Denied; - m.clear(); - break; - case 3: - break; + switch ( mode ) { + case 0: // ignore: + setMDNSentState( KMMsgMDNIgnore ); + return 0; + default: + case 1: + kdFatal(5006) << "KMMessage::createMDN(): The \"ask\" mode should " + << "never appear here!" << endl; + break; + case 2: // deny + d = MDN::Denied; + m.clear(); + break; + case 3: + break; + } } SVN commit 658035 by schaarsc: port 630582 in KMime::MDN::AutomaticAction mode ignore MDN user settings fake header fields if missing and remove them later. BUG:91252 M +18 -0 kmfilteraction.cpp M +23 -20 kmmessage.cpp --- branches/KDE/3.5/kdepim/kmail/kmfilteraction.cpp #658034:658035 @@ -115,11 +115,29 @@ void KMFilterAction::sendMDN( KMMessage * msg, KMime::MDN::DispositionType d, const QValueList<KMime::MDN::DispositionModifier> & m ) { if ( !msg ) return; + + /* createMDN requires Return-Path and Disposition-Notification-To + * if it is not set in the message we assume that the notification should go to the + * sender + */ + const QString returnPath = msg->headerField( "Return-Path" ); + const QString dispNoteTo = msg->headerField( "Disposition-Notification-To" ); + if ( returnPath.isEmpty() ) + msg->setHeaderField( "Return-Path", msg->from() ); + if ( dispNoteTo.isEmpty() ) + msg->setHeaderField( "Disposition-Notification-To", msg->from() ); + KMMessage * mdn = msg->createMDN( KMime::MDN::AutomaticAction, d, false, m ); if ( mdn && !kmkernel->msgSender()->send( mdn, KMail::MessageSender::SendLater ) ) { kdDebug(5006) << "KMFilterAction::sendMDN(): sending failed." << endl; //delete mdn; } + + //restore orignial header + if ( returnPath.isEmpty() ) + msg->removeHeaderField( "Return-Path" ); + if ( dispNoteTo.isEmpty() ) + msg->removeHeaderField( "Disposition-Notification-To" ); } --- branches/KDE/3.5/kdepim/kmail/kmmessage.cpp #658034:658035 @@ -1435,27 +1435,30 @@ s = MDN::SentManually; } - if ( mode == 1 ) { // ask - if ( !allowGUI ) return 0; // don't setMDNSentState here! - mode = requestAdviceOnMDN( "mdnNormalAsk" ); - s = MDN::SentManually; // asked user - } + if ( a != KMime::MDN::AutomaticAction ) { + //TODO: only ingore user settings for AutomaticAction if requested + if ( mode == 1 ) { // ask + if ( !allowGUI ) return 0; // don't setMDNSentState here! + mode = requestAdviceOnMDN( "mdnNormalAsk" ); + s = MDN::SentManually; // asked user + } - switch ( mode ) { - case 0: // ignore: - setMDNSentState( KMMsgMDNIgnore ); - return 0; - default: - case 1: - kdFatal(5006) << "KMMessage::createMDN(): The \"ask\" mode should " - << "never appear here!" << endl; - break; - case 2: // deny - d = MDN::Denied; - m.clear(); - break; - case 3: - break; + switch ( mode ) { + case 0: // ignore: + setMDNSentState( KMMsgMDNIgnore ); + return 0; + default: + case 1: + kdFatal(5006) << "KMMessage::createMDN(): The \"ask\" mode should " + << "never appear here!" << endl; + break; + case 2: // deny + d = MDN::Denied; + m.clear(); + break; + case 3: + break; + } } |