+ FILE *f;
+ uschar *buffer;
+ int buffer_capacity;
+
+ f = fdopen(fd, "wb");
+ for (h = header_list; h != NULL; h = h->next)
+ if (h->type == htype_received) fprintf(f,"%s",h->text);
+ fprintf(f,"From: %s\n",from.length==-1 ? envelope_to : from.character);
+ for (p=recipient; p; p=p->next) fprintf(f,"To: %s\n",p->text);
+ fprintf(f,"Auto-submitted: sieve-notify\n");
+ if (header.length>0) fprintf(f,"%s",header.character);
+ if (message.length==-1)
+ {
+ message.character=US"Notification";
+ message.length=Ustrlen(message.character);
+ }
+ /* Allocation is larger than neccessary, but enough even for split MIME words */
+ buffer_capacity=32+4*message.length;
+ buffer=store_get(buffer_capacity);
+ if (message.length!=-1) fprintf(f,"Subject: %s\n",parse_quote_2047(message.character, message.length, US"utf-8", buffer, buffer_capacity, TRUE));
+ fprintf(f,"\n");
+ if (body.length>0) fprintf(f,"%s\n",body.character);
+ fflush(f);
+ (void)fclose(f);
+ (void)child_close(pid, 0);