[Dovecot] deliver w/quotas - MDN after accept mail?

Ken A ka at pacific.net
Tue Sep 25 23:05:18 EEST 2007


Ken A wrote:
> thanks! -e did it.

correction.. sendmail says EX_NOPERM is a permanent error, and issues 
it's own DSN immediately. "dsn=5.0.0, stat=Insufficient permission".
Ken


> Ken
> 
> pod wrote:
>>>>>>> "KA" == Ken A <ka at pacific.net> writes:
>>
>>     KA> I'm testing deliver with sendmail and fs quotas.
>>
>>     KA> On an over quota condition, deliver accepts the mail, deletes it,
>>     KA> then issues a MDN immediately.
>>
>>     KA> Is there a way to get deliver to soft fail like procmail does 
>> with
>>     KA> a 400 error and queue the mail, then let sendmail handle the MDN,
>>     KA> following it's "confTO_QUEUEWARN" and "confTO_QUEUERETURN" ?
>>
>> Last time I looked at deliver it seemed like there were very few
>> conditions it considered as a temporary failure and thus for it to return
>> EX_TEMPFAIL.  I also was considering over-quota conditions (also
>> filesystem quotas).
>>
>> The '-e' option to deliver will, possibly by accidental side-effect, 
>> avoid
>> calling the deliver-generated bounce code.  Instead deliver will write
>> some error text on stderr and exit EX_NOPERM.
>>
>> The code in question is src/deliver/deliver.c lines 810 -- 835 which
>> occurs right after attempting to save the message (i.e. ret is the return
>> code from the save attempt).  The '-e' option is what sets
>> stderr_rejection.
> 
> 
> Tried with -e, but sendmail says EX_NOPERM is a permanent error, and 
> issues it's own DSN immediately. "dsn=5.0.0, stat=Insufficient 
> permission". :-(
> 
> Ken
> 
> 
>>
>>     if (ret < 0) {
>>         const char *error, *msgid;
>>         bool syntax, temporary_error;
>>         int ret;
>>
>>         error = mail_storage_get_last_error(storage, &syntax,
>>                             &temporary_error);
>>         if (temporary_error)
>>             return EX_TEMPFAIL;
>>
>>         msgid = mail_get_first_header(mail, "Message-ID");
>>         i_info("msgid=%s: Rejected: %s",
>>                msgid == NULL ? "" : str_sanitize(msgid, 80),
>>                str_sanitize(error, 512));
>>
>>         /* we'll have to reply with permanent failure */
>>         if (stderr_rejection) {
>>             fprintf(stderr, "%s\n", error);
>>             return EX_NOPERM;
>>         }
>>         ret = mail_send_rejection(mail, destination, error);
>>         if (ret != 0)
>>             return ret < 0 ? EX_TEMPFAIL : ret;
>>         /* ok, rejection sent */
>>     }
>>
>> As Timo has said elsewhere "deliver could use a rewrite some day..".
>>
> 
> 
> 
> 


-- 
Ken Anderson
Pacific.Net


More information about the dovecot mailing list