| Summary: | MDNs are not sent | ||
|---|---|---|---|
| Product: | [Unmaintained] kmail | Reporter: | BORGULYA Gábor <bugs2> |
| Component: | general | Assignee: | kdepim bugs <pim-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | michael.seiwert |
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Gentoo Packages | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| 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;
+ }
}
|