diff -u spamass-milter-0.3.1/spamass-milter.cpp spamass-milter-mod/spamass-milter.cpp
--- spamass-milter-0.3.1/spamass-milter.cpp	2008-09-24 22:33:11.000000000 +0200
+++ spamass-milter-mod/spamass-milter.cpp	2008-09-24 23:40:19.000000000 +0200
@@ -155,6 +155,7 @@
 int flag_debug = (1<<D_ALWAYS);
 bool flag_reject = false;
 int reject_score = -1;
+char *reject_message = "Blocked by SpamAssassin";
 bool dontmodifyspam = false;    // Don't modify/add body or spam results headers
 bool dontmodify = false;        // Don't add SA headers, ever.
 bool flag_sniffuser = false;
@@ -182,11 +183,12 @@
 main(int argc, char* argv[])
 {
    int c, err = 0;
-   const char *args = "fd:mMp:P:r:u:D:i:Ib:B:e:x";
+   const char *args = "fd:mMp:P:r:t:u:D:i:Ib:B:e:x";
    char *sock = NULL;
    bool dofork = false;
    char *pidfilename = NULL;
    FILE *pidfile = NULL;
+   char *env_buffer = NULL;
 
 #ifdef HAVE_VERBOSE_TERMINATE_HANDLER
 	std::set_terminate (__gnu_cxx::__verbose_terminate_handler);
@@ -194,6 +196,11 @@
 
    openlog("spamass-milter", LOG_PID, LOG_MAIL);
 
+	/* Process environment variables */
+	env_buffer = getenv("SPAMASS_MILTER_REJECT_MESSAGE");
+	if (env_buffer != NULL)
+		reject_message = env_buffer;
+
 	/* Process command line options */
 	while ((c = getopt(argc, argv, args)) != -1) {
 		switch (c) {
@@ -237,6 +244,9 @@
 				flag_reject = true;
 				reject_score = atoi(optarg);
 				break;
+			case 't':
+				reject_message = strdup(optarg);
+				break;
 			case 'u':
 				flag_sniffuser = true;
 				defaultuser = strdup(optarg);
@@ -305,6 +315,9 @@
       cout << "   -P pidfile: Put processid in pidfile" << endl;
       cout << "   -r nn: reject messages with a score >= nn with an SMTP error.\n"
               "          use -1 to reject any messages tagged by SA." << endl;
+      cout << "   -t text: when rejecting messages (-r), send SMTP status 550 5.7.1 with\n"
+              "          the text specified here as explanation for humans.\n"
+              "          Place the text in double-quotes." << endl;
       cout << "   -u defaultuser: pass the recipient's username to spamc.\n"
               "          Uses 'defaultuser' if there are multiple recipients." << endl;
       cout << "   -x: pass email address through alias and virtusertable expansion." << endl;
@@ -458,7 +471,7 @@
 	if (do_reject)
 	{
 		debug(D_MISC, "Rejecting");
-		smfi_setreply(ctx, "550", "5.7.1", "Blocked by SpamAssassin");
+		smfi_setreply(ctx, "550", "5.7.1", reject_message);
 
 
 		if (flag_bucket)
