Outgoing BCC bei SRS

bundfeg

New Member
Hi ihr,

sorry, dass ich das hier auf deutsch und nicht direkt in git abgebe, aber ich fühl mich da noch nicht so wohl und was ich gemacht hab, kann ich auch deutlich besser auf deutsch erklären ;-)

Hintergrund ist, dass wir leider SRS aktivieren mussten (aus Gründen) und das hat - wie wir heute gemerkt haben - das Feature "ausgehende Mails als BCC schicken" kaputt gemacht. Das liegt daran, dass der Postfix beim SRS zuerst den Absender ändert und dieser Absender wird dann in der SQL-Abfrage in der Datei mysql-virtual_outgoing_bcc.cf nicht mehr in der Datenbank erkannt, also wird die BCC-Adresse nicht gezogen.

Dabei wird die SRS-Absender-Adresse nach einem Schema gebaut und zwar wird aus
Code:
userpart@example.com
Code:
XXXX=YYYY=ZZ=example.com=userpart@sender.com
.
Da man aus diesem String aber ja mit sql auch wieder die originale Absender-Adresse extrahieren kann, hab ich eben die mysql-virtual_outgoing_bcc.cf umgebaut und so wird aus
SQL:
user = {mysql_server_ispconfig_user}
password = {mysql_server_ispconfig_password}
dbname = {mysql_server_database}
hosts = {mysql_server_ip}
query = SELECT sender_cc FROM (
            SELECT SUBSTRING_INDEX(sender_cc, ',', 1) AS sender_cc
              FROM mail_user
             WHERE email = '%s' AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
               AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX('%s', '@', -1) AND active = 'y' AND server_id = {server_id})
            UNION
            SELECT SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
              FROM mail_user u, mail_forwarding f
             WHERE f.destination REGEXP CONCAT( '((^|\\n)[[:blank:]]*,?|[[:alnum:]][[:blank:]]*,)[[:blank:]]*',
                                                REPLACE( REPLACE(u.email, '+', '\\+'), '.', '\\.' ),
                                                '[[:blank:]]*(,[[:blank:]]*[[:alnum:]]|,?[[:blank:]]*(\\r?\\n|$))' )
               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
               AND f.source = '%s' AND f.allow_send_as = 'y' AND f.active = 'y' AND f.server_id = {server_id}
               AND EXISTS (SELECT domain_id FROM mail_domain WHERE domain = SUBSTRING_INDEX('%s', '@', -1) AND active = 'y' AND server_id = {server_id})
        ) table1 WHERE sender_cc != '' LIMIT 1

SQL:
user = {mysql_server_ispconfig_user}
password = {mysql_server_ispconfig_password}
dbname = {mysql_server_database}
hosts = {mysql_server_ip}
query = SELECT sender_cc FROM (
            SELECT SUBSTRING_INDEX(sender_cc, ',', 1) AS sender_cc
              FROM mail_user
             WHERE (email = '%s' OR email = CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX('%s', '=', -1), '@', 1), '@', SUBSTRING_INDEX(SUBSTRING_INDEX('%s', '=', 4), '=', -1))) AND disablesmtp = 'n' AND sender_cc != '' AND server_id = {server_id}
               AND EXISTS (SELECT domain_id FROM mail_domain WHERE (domain = SUBSTRING_INDEX('%s', '@', -1) OR domain = SUBSTRING_INDEX(SUBSTRING_INDEX('%s', '=', 4), '=', -1)) AND active = 'y' AND server_id = {server_id})
            UNION
            SELECT SUBSTRING_INDEX(u.sender_cc, ',', 1) AS sender_cc
              FROM mail_user u, mail_forwarding f
             WHERE f.destination REGEXP CONCAT( '((^|\\n)[[:blank:]]*,?|[[:alnum:]][[:blank:]]*,)[[:blank:]]*',
                                                REPLACE( REPLACE(u.email, '+', '\\+'), '.', '\\.' ),
                                                '[[:blank:]]*(,[[:blank:]]*[[:alnum:]]|,?[[:blank:]]*(\\r?\\n|$))' )
               AND u.disablesmtp = 'n' AND u.sender_cc != '' AND u.server_id = {server_id}
               AND (f.source = '%s' OR f.source = CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX('%s', '=', -1), '@', 1), '@', SUBSTRING_INDEX(SUBSTRING_INDEX('%s', '=', 4), '=', -1))) AND f.allow_send_as = 'y' AND f.active = 'y' AND f.server_id = {server_id}
               AND EXISTS (SELECT domain_id FROM mail_domain WHERE (domain = SUBSTRING_INDEX('%s', '@', -1) OR domain = SUBSTRING_INDEX(SUBSTRING_INDEX('%s', '=', 4), '=', -1)) AND active = 'y' AND server_id = {server_id})
        ) table1 WHERE sender_cc != '' LIMIT 1


Das funktioniert jetzt immer, egal ob SRS an oder aus ist. Vielleicht hilfts jemandem (server_id anpassen nicht vergessen) oder ihr baut das in die Installation ein (vielleicht auch mit einem Kommentar im SQL dabei, das checkt jetzt ja wirklich niemand mehr, wenn er sich das mal anschaut).

Ich freu mich tierisch, dass es jetzt wieder läuft und dass es eine Lösung gibt, die nur an dieser Stelle eine Änderung erfordert.

Lieben Gruß
Christoph
 

Werbung

Top