[exim] Preserving newlines

Top Page
Delete this message
Reply to this message
Author: David Clymer
Date:  
To: exim-users
Subject: [exim] Preserving newlines
I've set up a vacation message system where users set/unset their
vacation autoreply message by sending a message with a particular
subject to themselves. The message is stored in an SQL database.

The problem I am having is that newlines are not being preserved, so I I
send a multi-line vacation message, it gets inserted into the database
as one big line. What sort of escaping must I do in order to get this
right?

This is what I'm doing:

#---------------------
# Vacation
#---------------------

SQL_TURN_VACATION_ON = ${lookup mysql{INSERT INTO account_option (account_option.account_id, account_option.name, account_option.value) VALUES(SQL_USER_ID, 'vacation_message', '${quote_mysql:${escape:$message_body}}')}{1}{0}}

SQL_TURN_VACATION_OFF = ${lookup mysql{DELETE FROM account_option WHERE account_option.account_id = 'SQL_USER_ID' AND account_option.name = 'vacation_message'}{1}{0}}

SQL_VACATION_IS_ON = ${lookup mysql{SELECT account_option.value FROM account_option INNER JOIN account ON account_option.account_id = account.id INNER JOIN domain ON account.domain_id = domain.id WHERE domain.name = '${domain}' AND account.username = '${local_part}' AND account_option.name = 'vacation_message'}{1}{0}}

SQL_VACATION_MESSAGE = ${lookup mysql{SELECT account_option.value FROM account_option INNER JOIN account ON account_option.account_id = account.id INNER JOIN domain ON account.domain_id = domain.id WHERE domain.name = '${domain}' AND account.username = '${local_part}' AND account_option.name = 'vacation_message'}{$value}fail}


## vacation routers

user_vacation_on:
     driver = accept
     condition = ${if and{ {eq{$local_part}{${local_part:$sender_address}}} {match{${lc:$h_subject:}}{\N^\s*vacation\s+on\N}}} {yes}{no}}
     transport = vacation_on


user_vacation_off:
     driver = accept
     condition = ${if and{ {eq{$local_part}{${local_part:$sender_address}}} {match{${lc:$h_subject:}}{\N^\s*vacation\s+off\N}}} {yes}{no}}
     transport = vacation_off


user_vacation:
     driver = accept
     # do not reply to errors, lists, or if no vacation message has been set
     condition = "${if and { {eq{SQL_VACATION_IS_ON}{1}} {!match {$h_precedence:}{(?i)junk|bulk|list}} {def:sender_address} }{yes}{no} }"
     no_expn
     # do not reply to errors and bounces or lists
     senders = " ! ^.*-request@.*:\
                 ! ^owner-.*@.*:\
                 ! ^postmaster@.*:\
                 ! ^listmaster@.*:\
                 ! ^mailer-daemon@.*\
                 ! ^root@.*"
     transport = vacation_reply
     unseen



## vacation transports

vacation_reply:
     driver = autoreply
     user = mail
     group = mail
     from = Autoreply System <${original_local_part}@${original_domain}>
     log = /var/mail/${domain}/${local_part}/vacation.log
     once = /var/mail/${domain}/${local_part}/vacation.db
     once_repeat = 7d
     subject = ${if def:h_Subject: {Re: ${quote:${escape:${length_50:$h_Subject:}}} (autoreply)} {I am on vacation} }
     text = SQL_VACATION_MESSAGE
     to = "${sender_address}"


vacation_on:
     driver = autoreply
     text = ${if eq{SQL_TURN_VACATION_ON}{1}{Your vacation message has been set to: \n\nSQL_VACATION_MESSAGE}{Unable to set vacation message. Please contact PC Support.}}
     from = Autoreply System <${original_local_part}@${original_domain}>
     subject = Re: Vacation on
     to = ${sender_address}


vacation_off:
     driver = autoreply
     text = ${if eq{SQL_TURN_VACATION_OFF}{1}{Vacation message removed.}{Unable to remove vacation message. Please contact PC Support.}}
     from = Autoreply System <${original_local_part}@${original_domain}>
     subject = Re: Vacation off
     to = ${sender_address}



-davidc

--
gpg-key: http://www.zettazebra.com/files/key.gpg