===== Install ===== ==== apt install sympa 6.2.70 on ubuntu 24.04 ==== * Start with [[https://www.sympa.community/manual/install.html|the official installation docs using apt]] * Then when that fails :-o === mysql === * with install ''dbconfig-common'' to set up DB using mysql just doesn't work. * it didn't work for mailman and it didn't work here * it Says "password doesn't match requirements" (which isn't true). * you have to set up the DB yourself sudo mysql -p -e "CREATE DATABASE IF NOT EXISTS sympa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS 'sympa'@'localhost' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON sympa.* TO 'sympa'@'localhost'; FLUSH PRIVILEGES;" sudo bash -c 'cat >> /etc/sympa/sympa/sympa.conf < db_name sympa EOF' === nginx === //apparently standard setup is with Apache? But this works// server { listen 80; server_name ; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name ; ssl_certificate /etc/letsencrypt/live//fullchain.pem; ssl_certificate_key /etc/letsencrypt/live///privkey.pem; root /usr/lib/cgi-bin/sympa; access_log /var/log/nginx/sympa-access.log; error_log /var/log/nginx/sympa-error.log; location /static-sympa/ { alias /usr/share/sympa/static_content/; access_log off; } location /css-sympa/ { alias /var/lib/sympa/css/; access_log off; } location /pictures-sympa/ { alias /var/lib/sympa/pictures/; access_log off; } location / { include fastcgi_params; fastcgi_pass unix:/run/sympa/wwsympa.socket; fastcgi_param SCRIPT_FILENAME /usr/lib/cgi-bin/sympa/wwsympa.fcgi; fastcgi_param SCRIPT_NAME ""; fastcgi_param PATH_INFO $uri; } } === Postfix === == main.cf == * Postfix tries to run some sympa stuff as an unprivileged user. Add this line to have it run as the sympa user instead: sympa unix - n n - - pipe flags=R user=sympa argv=/usr/lib/sympa/bin/queue ${recipient} * add this to the ''mydestination'' line: '''' * add ''hash:/etc/postfix/transport'' to the ''transport_maps'' line * add ''hash:/etc/sympa/aliases.sympa.postfix'' to ''alias_maps'' * add ''alias_database = hash:/etc/sympa/aliases.sympa.postfix'' * suggestion (for sending larger emails): ''message_size_limit = 41943040'' == master.cf == sympa unix - n n - - pipe flags=R user=sympa argv=/usr/lib/sympa/bin/queue ${recipient} === /etc/sympa/sympa/sympa.conf === wwsympa_url # 1. Add email address text when list is created alias_manager /usr/lib/sympa/bin/alias_manager.pl # 2. compile email address text and add to db aliases_program /usr/sbin/postalias # 3. file Location for text and db sendmail_aliases /etc/sympa/aliases.sympa.postfix # If you have trouble change from default log_level 1 log_level 2 # The sympa manager defaults to sympa so emails to subscribe/unsubscribe etc. will come from sympa@DOMAIN. You can change this. For example, to have them come from manager instead add the below line: email manager ==== Notes ==== * config is at ''/etc/sympa/sympa/sympa.conf'' * when reading official documentation ''$SYSCONFDIR'' is ''/etc/sympa'' * when reading official documentation ''$LIBEXECDIR'' is ''/usr/share/sympa/bin'' ==== Troubleshooting ==== * sympa logs go to ''syslog''. View in realtime: ''sudo tail -f /var/log/syslog | grep --line-buffered -Ei 'sympa|wwsympa'' * postfix logs go to ''/var/log/mail.log'' ===== Configuration ===== ==== Amazon SES relay ==== * if forwarding emails to Amazon SES for sending, Amazon gets upset because of a duplicate header: ''Precedence'' * This is because Sympa adds a Precedence: bulk (or list) header automatically to all list traffic to help spam filters identify it as a mailing list. * Apparently the outgoing sender might have also added a Precedence header or maybe sympa is just confused :-o * The result is that there is no Precedence header at all but that header has been obsoleted anyway so nothing lost * to fix, add to ''/etc/sympa/sympa/sympa.conf'': ''remove_outgoing_headers Precedence'' * also available as a setting in the UI in ''sending/receiving setup'' -> ''Header fields to be removed before message distribution (remove_outgoing_headers)(default)'' ==== Customizing Templates ==== Sympa uses a "Cascading" template system. It looks for a template (like welcome.tt2) in this specific order: - List Level: ''/var/lib/sympa/list_data/[list_name]/mail_tt2/'' (Highest Priority) - Robot/Domain Level: ''/etc/sympa/[domain]/mail_tt2/'' - Site Level: ''/etc/sympa/mail_tt2/'' - Default: ''/usr/share/sympa/default/mail_tt2/'' (Lowest Priority) === Cascaded Templates for messages sent to the list === * have 2 footers, one plaintext (''message.footer'') and one html (''message.footer.mime'') - List Level: ''/etc/sympa/list_configs/[list_name]/message.footer.mime'' - Robot/Domain Level: ''/etc/sympa/lists.lawrencemakers.org/message.footer.mime'' - Site/Global Level: /''etc/sympa/message.footer.mime'' - Default: ''/usr/share/sympa/default/message.footer.mime'' ==== Unsubscribe Header ==== * There's the "standard" list-unsubscribe header as defined in RFC 2369 and a newer "one-click" header as defined in RFC 8058 * Sympa v6.2.70 as packaged with ubuntu 24.04 generates the standard header automatically by default * The newer "one-click" header is not supported until v6.2.72 === The Standard Header (RFC 2369) === * If the header is working properly there will be a line of hidden metadata at the top of an email that looks something like List-Unsubscribe: ?subject=SIGNOFF%20>, /signoff//user@email.com> * If this header is present, Gmail, Yahoo, and "friends" will automatically display their native "Unsubscribe" button next to the sender's name. ==== List Config ==== * config file located at: ''/var/lib/sympa/list_data//config'' * To get the emails sent from the list instead of the sender in the UI: * ''Admin'' -> ''Edit List Config'' -> ''DKIM/DMARC/ARC'' * ''DMARC Protection'' -> ''All'' * ''New From name format'' -> ''"Name" (via list)'' * Change the from address from the sender to the list: * ''Admin'' -> ''Edit List Config'' -> ''Sending/Receiving Setup'' * ''"Reply address"'' -> change to ''All'' * Prepend the list name to the subjects when sending out: * ''Admin'' -> ''Edit List Config'' -> ''Sending/Receiving Setup'' * ''Subject tagging (custom_subject)'' -> ''[% list.name %]'' * Get rid of the "via list" in the from: * ''Admin'' -> ''Edit List Config'' -> ''DKIM/DMARC/ARC'' * ''New From name format (phrase)'' -> set to ''Name'' * consider increasing max message size: * ''Admin'' -> ''Edit List Config'' -> ''Sending/Receiving Setup'' * ''Maximum message size (max_size)(default)'' -> ''20971520'' * allow subscribers to view who is subscribed: * ''Who can review subscribers (review)'' -> ''Restricted to subscribers (private)'' * create a list template to change the defaults for a new list: # make a home for the new default override sudo mkdir -p /etc/sympa/create_list_templates # copy from the original default sudo cp -r /usr/share/sympa/default/create_list_templates/discussion_list /etc/sympa/create_list_templates/ # edit to your heart's content: sudo emacs -nw /etc/sympa/create_list_templates/discussion_list/config.tt2 ==== Prettying it up ==== === Logo and Favicon === * the logo does not change the size of the blue line at the top of the site so you will get a logo that straddles blue and white * with the nginx setup above the logo and favicon images should live at ''/usr/share/sympa/static_content'' * to get sympa to see them edit/add these lines to ''/etc/sympa/sympa/sympa.conf'': logo_html_definition my great logo # adjust max-height as appropriate favicon_url /static-sympa/.ico ==== Null Sender ==== === Defining the problem === * Sympa uses null sender (<>) when sending automated administrative messages like "post rejected: you aren't a member of the list" * Amazon SES rejects null sender on SMTP relay (all my testing confirmed this and their AI FAQ thingie says this as well) * Sending direct (skipping Amazon SES relay) fails too at least for gmail, who blocks null sender from my server address and accepts other addresses from the same server IP * I tried many many attempts to get Postfix to replace the null sender with noreply@ and after hours of this gave up === Workaround === //yes I know this is a terrible workaround but couldn't figure out anything better// * Edit Sympa's ''/usr/share/sympa/lib/Sympa/Mailer.pm'' to use ''no-reply@'' instead of null. In the file: #change ($return_path eq '<>' ? '' : $return_path), '--', @rcpt; #to ($return_path eq '<>' ? 'no-reply@SYMPA_SUBDOMAIN' : $return_path), '--', @rcpt; * write a simple script to make sure you are notified if ''Mailer.pm'' ever gets updated: #!/bin/bash FILE="/usr/share/sympa/lib/Sympa/Mailer.pm" TARGET_MD5="" # Check if the file exists if [ ! -f "$FILE" ]; then /usr/bin/echo "Error: File '$FILE' not found." /usr/bin/logger -t checkMailer "Error: File '$FILE' not found." /usr/bin/swaks --from FROM_ADDR --to TO_ADDR --h-Subject "checkMailer: FILE NOT FOUND" --body "Error: File '$FILE' not found." --server localhost exit 1 fi # Get the md5 of the file MD5=$(md5sum /usr/share/sympa/lib/Sympa/Mailer.pm | awk {'print $1'}) # Compare the md5 to the target if [ "$MD5" == "$TARGET_MD5" ]; then /usr/bin/echo "INFO: md5 for $FILE matches target." /usr/bin/logger -t checkMailer "INFO: md5 for $FILE matches target." /usr/bin/swaks --from FROM_ADDR --to TO_ADDR --h-Subject "checkMailer: md5 matches" --body "Good news: the md5 of $FILE has not changed" --server localhost else /usr/bin/echo "WARNING: md5 for $FILE does NOT match target." /usr/bin/logger -t checkMailer "WARNING: md5 for $FILE does NOT match target." /usr/bin/swaks --from FROM_ADDR --to TO_ADDR --h-Subject "checkMailer: md5 does NOT match" --body "Bad news: the md5 of $FILE changed. Update null sender now." --server localhost fi * ''chmod 755'' and set up a daily cron for the script * set Sympa to dump any bounced emails to noreply@: * in ''/etc/sympa/aliases.sympa.postfix'' add ''no-reply: "|/bin/true"'' * ''sudo postalias /etc/sympa/aliases.sympa.postfix'' * ''sudo postfix reload'' === Oh wait but we aren't done: Admin email is passing Google DKIM but failing Outlook DKIM === Outlook is pretty unhappy with ''Content-Type: multipart/report''. To fix this: * change ''/etc/sympa/mail_tt2/delivery_status_notification.tt2'' from ''Content-Type: multipart/report'' to ''Content-Type: text/plain'' * //To make it look pretty, you will definitely want make some other changes to the template as well// ==== Misc ==== * It's a good idea to set the domain up with [[https://postmaster.google.com/|Google Postmaster Tools]] for some analytics sending to gmail addresses if you ever need it * There's a list template which sets the defaults for new lists when they are created. It's possible to override with a new template. I did not look further into this. * completely removing a list needs to happen from the CLI: ''sudo /usr/lib/sympa/bin/sympa.pl --purge_list=LISTNAME@SUBDOMAIN_OF_WEB_UI'' * From [[https://www.sympa.community/manual/customize/basics-templates.html|the documentation]]: "By default, text body of mail template (except attached part described in above) is wrapped. X-Sympa-NoWrap pseudo-header field prevents line wrapping."