Posts Tagged ‘Mail’

Sonntag, 1. März 2020

Unter macOS High Sierra mit MacPorts, postfix und s-nail E-Mails versenden

Emails von der Kommandozeile versenden — was man bei Linux im Handumdrehen hinkriegt, erforderte bei mir unter macOS stundenlange Handstände.

MacPorts postfix anstelle macOS postfix

Doch jetzt habe ich den Kniff raus: Die von macOS mitgelieferte postfix-Installation habe ich schlussendlich ignoriert und auf das MacPorts postfix-Paket gesetzt.

MacPorts Variants nicht vergessen

Der erste Fallstrick lauert schon hier: Um heutzutage über einen Hoster E-Mails zu versenden, benötigt man zwingend SASL und TLS. Diese Features müssen als sog. MacPorts Variants explizit mitinstalliert werden, sonst landen sie nicht auf dem Mac:

# port install postfix +sasl +tls

Ansonsten meldet postfix:

...
Mar 01 14:16:11 imac postfix/smtp[70687]: warning: smtp_sasl_auth_enable is true, but SASL support is not compiled in
Mar 01 14:16:11 imac postfix/smtp[70687]: warning: TLS has been selected, but TLS support is not compiled in
...

Verzeichnisse und Pfade zur Sicherheit hardkodieren

Eine funktionierende postfix-Konfiguration mitsamt Installationsscript habe ich von meinen Linux-Servern herüberkopiert (diese Anleitung alleine würde das Format dieses Blog-Artikels sprengen). Die Konfiguration habe ich aber mit den MacPorts-Einstellungen ergänzt. Denke daran: Bei Linux liegen die Konfiguration sowie die Arbeitsverzeichnisse allesamt am erwarteten Ort (bspw. /etc/postfix/main.cf). Da wir unter macOS auf MacPorts setzen, liegt dieselbe Datei hier unter /opt/local/etc/postfix/main.cf. Deshalb habe ich zur Sicherheit in main.cf folgende von MacPorts vorgeschlagene Ergänzungen (siehe /opt/local/etc/postfix/main.cf.sample) hinzugefügt:

$ cat /opt/local/etc/postfix/main.cf
# Directories
queue_directory = /opt/local/var/spool/postfix
command_directory = /opt/local/sbin
daemon_directory = /opt/local/libexec/postfix
data_directory = /opt/local/var/lib/postfix
meta_directory = /opt/local/etc/postfix
manpage_directory = /opt/local/share/man
sample_directory = /opt/local/share/postfix/sample
readme_directory = /opt/local/share/postfix/readme
shlib_directory = no
html_directory = no

# Paths
sendmail_path = /opt/local/sbin/sendmail
newaliases_path = /opt/local/bin/newaliases
mailq_path = /opt/local/bin/mailq

# Log
maillog_file_prefixes = /var, /var/log/macports/postfix
maillog_file = /var/log/macports/postfix/postfix.log

# Other stuff ...
mail_owner = _postfix
setgid_group = _postdrop
default_privs = nobody
unknown_local_recipient_reject_code = 550
debug_peer_level = 2
...

Logs in eine Datei schreiben

Weiter hatte ich während dem Debuggen so meine liebe Mühe, die Logging-Informationen zu finden, da diese an syslog gesendet werden und bei macOS dann in der Console.app landen. Deshalb habe ich im Gegensatz zu meinen Linux-Installationen auch noch die Konfigurationsdatei /opt/local/etc/postfix/master.cf anpassen müssen. Essentiell war es, die folgende Zeile einzufügen:

...
postlog   unix-dgram n  -       n       -       1       postlogd
...

Quelle: Postfix logging to file or stdout

Verhindern, dass fälschlicherweise die macOS postfix-Konfiguration geladen wird

Damit mir die Parallelinstallation von Postfix nicht in die Quere kommt und ich mir sicher war, dass die MacPorts-Installation von postfix tatsächlich die Konfiguration unter /opt frisst, habe ich kurzerhand den macOS postfix-Ordner verschoben:

# mv /etc/postfix /etc/postfix.bkp

Ob das wirklich nötig gewesen wäre sei dahingestellt; Vorsicht, wer das auf seinem System macht: Ich garantiere für nichts.

Postfix starten und stoppen

Die Postfix-Installation lädt man folgendermassen:

# port load postfix
# launchctl unload /Library/LaunchDaemons/org.macports.postfix.plist
# launchctl load -w /Library/LaunchDaemons/org.macports.postfix.plist

Die plist-Datei zeigt als symbolischer Link nach /opt/local/etc/LaunchDaemons/org.macports.postfix/org.macports.postfix.plist. In dieser Datei habe ich folgendes angepasst/ergänzt — das ist nicht zwingend nötig, sollte aber dazu führen, dass Postfix bei jedem Neustart automatisch gestartet wird. Ausserdem sollten im Fall von Start-Problemen Fehlermeldungen in eine Log-Datei geschrieben werden:

...
        <string>--pid=none</string>
    </array>
    <key>Disabled</key>
    <false/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/var/log/launchd.macports.postfix.standard.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/launchd.macports.postfix.error.log</string>
</dict>
</plist>

s-nail verwendet standardmässig die macOS mail-Executables

Anschliessend musste noch eine Mail-Programm her, welches erlaubt, den Absender eines E-Mails selber zu setzen. MacPorts bietet hierzu s-nail an (Homepage des Entwicklers).

# port install s-nail

Als ich mit s-nail ein Test-Mail versenden wollte folgte eine weitere Hiobs-Botschaft:

$ echo "Test email" | mail user@domain.tld
unknown: fatal: open /etc/postfix/main.cf: No such file or directory
/Users/user/dead.letter 7/135
mail: ... message not sent

Ich übertreibe nicht, wenn ich sage, dass ich Stunden mit Debugging verbracht habe. Bis ich plötzlich realisierte, dass s-nail die offiziellen Mail-Executables mail, mailx und/oder sendmail unter /usr/bin verwendet. Der Lackmus-Test: Wenn ich diese Mail-Executables manuell aufrief, erschien ein- und dieselbe Fehlermeldung.

Dies obwohl meine Bash PATH-Variable /opt/local/bin und /opt/local/sbin vor /usr/bin und /usr/sbin nennt, verwendete s-nail aus irgendeinem Grund standardmässig die letztgenannten Pfade.

Wie sage ich s-nail aber, dass es stattdessen die MacPorts mail-Befehle verwenden soll? Folgende Anpassung in /opt/local/etc/mail.rc war nötig:

...
set mta=/opt/local/sbin/sendmail

Absender (From:) der E-Mails selber festlegen

Anschliessend musste noch eine Mail-Programm her, welches erlaubt, den Absender eines E-Mails selber zu setzen. Ich verwende in Bash-Scripts sehr oft folgendes Konstrukt, und ich wollte sicherstellen, dass die Scripts sowohl unter Debian GNU/Linux als auch macOS laufen (Argument -a):

$ echo -e "Test" | $(which mail) -a "From: DNS Query Analyzer " -s 'Top 25 DNS Queries' user@domain.tld another.user@domain.tld

Ich habe leider eine schlechte, aber auch eine gute Nachricht. Die gute: Man kann auch unter macOS den Absender setzen. Leider aber nicht mit demselben Befehl wie unter Debian GNU/Linux.

Bei s-nail muss ich leider ein anderes Argument verwenden:

$ echo -e "Test" | $(which mail) -r "DNS Query Analyzer " -s 'Top 25 DNS Queries' user@domain.tld another.user@domain.tld

Postfix hat Probleme mit selber gesetzter Absenderadresse und SPF Records

Doch nun trat bereits das nächste Problem auf, wie ein Blick in die leere INBOX und in /var/log/macports/postfix.log zeigte:

...
Mar 01 15:43:59 imac postfix/smtp[81049]: 4D0E3FBBE221: to=<user@domain.tld>, relay=s000.cyon.net[149.126.4.000]:25, delay=20, delays=0.03/20/0.03/0.04, dsn=5.0.0, status=bounced (host s000.cyon.net[149.126.4.000] said: 550 SPF: 1.2.3.4 is not allowed to send mail from emeidi.com (in reply to RCPT TO command))
...

Faszinierend. Unter Linux hatte ich eine solche Fehlermeldung noch nie gesehen. Ich verwende für den Versand „offizieller“ E-Mails jeweils emeidi.com als Absenderadresse.

Schlussendlich blieb nur die Holzhammer-Methode. Ich verschob alle Konfigurationsdateien, welche auf meinen Linux-Installationen nicht existierten, von /opt/local/etc/postfix in den Unterordner _old. Schlussendlich sah das Verzeichnis so aus:

$ find /opt/local/etc/postfix/opt/local/etc/postfix
/opt/local/etc/postfix/_old
/opt/local/etc/postfix/_old/access
/opt/local/etc/postfix/_old/access.sample
/opt/local/etc/postfix/_old/aliases
/opt/local/etc/postfix/_old/aliases.sample
/opt/local/etc/postfix/_old/bounce.cf.default
/opt/local/etc/postfix/_old/canonical
/opt/local/etc/postfix/_old/canonical.sample
/opt/local/etc/postfix/_old/generic
/opt/local/etc/postfix/_old/generic.sample
/opt/local/etc/postfix/_old/header_checks.sample
/opt/local/etc/postfix/_old/LICENSE
/opt/local/etc/postfix/_old/main.cf.default
/opt/local/etc/postfix/_old/main.cf.proto
/opt/local/etc/postfix/_old/main.cf.sample
/opt/local/etc/postfix/_old/master.cf.proto
/opt/local/etc/postfix/_old/master.cf.sample
/opt/local/etc/postfix/_old/relocated
/opt/local/etc/postfix/_old/relocated.sample
/opt/local/etc/postfix/_old/TLS_LICENSE
/opt/local/etc/postfix/_old/transport
/opt/local/etc/postfix/_old/transport.sample
/opt/local/etc/postfix/_old/virtual
/opt/local/etc/postfix/_old/virtual.sample
/opt/local/etc/postfix/header_checks
/opt/local/etc/postfix/main.cf
/opt/local/etc/postfix/makedefs.out
/opt/local/etc/postfix/master.cf
/opt/local/etc/postfix/postfix-files
/opt/local/etc/postfix/sasl
/opt/local/etc/postfix/sasl/outgoing
/opt/local/etc/postfix/sasl/outgoing.db

In sasl/outgoing entfernte ich zudem den TCP-Port nach der Server-Adresse, und master.cf ergänzte ich mit Zeilen, die bisher nur unter Linux existierten.

Heureka

Und jetzt endlich kann ich mir von der Kommandozeile aus E-Mails senden. Hat nur geschlagene sechs Stunden gedauert.

Tags: , , , , , , , , , , , , , , , ,
Labels: Apple, IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 11. September 2019

Die Absenderadresse inklusive Display Name eines mit Linux mail (bsd-mailx) gesendeten E-Mails festlegen

Im Grunde ganz simpel, wenn man den richtigen Befehl kennt:

echo "Test" | mail -a "From: Displayname <sender@server.tld>" -s "Subject" recipient@server.tld

Beim Verfassen dieses Blog-Posts fragte ich mich zudem spontan, mit welchem Debian-Paket das Executable /usr/bin/mail installiert wird. Bei dem Executable handelt es sich auf meinen Servern um einen Symlink auf /etc/alternatives/mail. Dieser Symlink ist wiederum ein Symlink auf /usr/bin/bsd-mailx. Somit stammt das Executable vom Debian-Paket bsd-mailx:

$ dpkg --list | grep mailx
ii  bsd-mailx                      8.1.2-0.20180807cvs-1        amd64        simple mail user agent

Sackgasse

Nur über Umwege zum Erfolg führte folgende Suchfunktion: Nachdem ich apt-files gemäss der Anleitung How To Find The Package That Provides A File (Installed Or Not) On Ubuntu, Debian Or Linux Mint installiert und die Datenbank einmalig gefüllt hatte, waren das die Resultate des Tools:

$ apt-file search /usr/bin/mail | grep mail$
python-twisted-core: /usr/bin/mailmail

Nicht was ich gesucht habe.

$ apt-file search /etc/alternatives/mail

Komisch. Ich habe diesen Symlink auf jeden Fall nicht eingerichtet; das muss doch von einem Debian-Paket gekommen sein?

$ apt-file search /usr/bin/bsd-mailx
bsd-mailx: /usr/bin/bsd-mailx

Jetzt aber!

Tags: , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 3. Juni 2015

Mail.app unter OS X sortiert IMAP-Ordner nicht (mehr) alphabetisch

ACHTUNG: Dieser Trick funktioniert spätestens unter macOS High Sierra nicht mehr. Hier der neue Weg zur Lösung des Problems.

Wenn Mail.app sich irgendeinmal im Laufe der Zeit entscheidet, neu erstellte IMAP-Ordner nicht alphabetisch in die Ordnerstruktur einzureihen, sondern einfach an das Ende der Ordnerliste stellt, ist es Zeit für diesen kleinen Trick:

The solution is to disable the associated account in Mail Preferences, Quit Mail, restart Mail and then enable to account again.

Quelle: Mac Mail not automatically sorting mailbox folders alphabetically

Auf Gut Deutsch: Das besagte IMAP-Konto unter den Einstellung auf Inaktiv setzen, Mail.app beenden und neu starten.

Bei mir fügte diese Aktion leider dazu, dass das Mail-Konto selber an den Schluss meiner fünf Mailkonten gestellt wurde. Ich musste das Spiel deshalb anschliessend noch mit allen anderen Konten durchführen.

Tags: , , , , , ,
Labels: Apple

4 Kommentare | neuen Kommentar verfassen

Samstag, 5. Juli 2014

E-Mail bei (erfolgreichem) SSH-Login

Dank Google und dem Internet war dieses unterfangen in einer Minute erledigt:

/etc/pam.d/sshd

Am Ende der Datei (die ich weder kannte und deren Inhalt ich nicht verstehe) fügte ich folgende Zeile ein:

...
session optional pam_exec.so seteuid /usr/local/bin/ssh-login-notify.sh

/usr/local/bin/ssh-login-notify.sh

Auch mailx kannte ich nicht, bisher habe ich immer mail verwendet (Erläuterungen zum Unterschied) — diese Ubuntu-Benutzer sind am „bleeding edge“ unterwegs!

#!/bin/sh
EMAILTO="logger@domain.tld"

if [ "$PAM_TYPE" != "close_session" ]; then
HOST="`hostname`"
SUBJECT="SSH Login: $PAM_USER from $PAM_RHOST on $HOST"
MESSAGE="`env`"

echo "$MESSAGE" | mailx -s "$SUBJECT" "$EMAILTO" &
fi

Quelle: How do I set up an email alert when a ssh login is successful?

Tags: , , , , , , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 24. März 2013

Wenn Apples Mail nach dem Verschieben einer IMAP-Nachricht diese nur noch als Base64-Müll anzeigt

… hilft nur eines: Man selektiert den IMAP-Ordner, welche die E-Mail-Nachricht enthält, und führt dann folgenden Befehl aus der Menuleiste aus:

  1. Mailbox
  2. Rebuild

Quelle: How to Fix Corrupted IMAP Attachments in Apple Mail

Die Nachrichten werden im Zuge dieser „Reinigung“ erneut vom Server heruntergeladen — und statt Base64-enkodiertem Zeichensalat sieht man bald wieder die Nachricht in Originalform.

Tags: , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 19. Juni 2011

Mail.app 4.5 sortiert IMAP-Ordner nicht alphabetisch

Offenbar erlaubt Apple seit Mac OS X Snow Leopard das Verschieben von IMAP-Ordnern innerhalb der Liste. Leider hat dies aber zur Folge, dass nachträglich erstellte Ordner nicht mehr alphabetisch eingeordnet werden, sondern ans Ende der Liste gelangen.

Um die Sortierung zurückzusetzen, führe man deshalb bei jeder sich bietender Gelegenheit folgenden Befehl aus:

$ rm ~/Library/Mail/<interne Bezeichnung des Mail-Kontos>/.mboxCache.plist

Quelle: Mail Not Sorting new Folders Added Alphbetically

Tags: , , , , ,
Labels: Apple

2 Kommentare | neuen Kommentar verfassen

Dienstag, 27. Juli 2010

Vacation-Meldung als Antwort auf automatisch generierte Mails verhindern

Sommerzeit — Ferienzeit — Vacation-Meldungszeit!

Dies hat heute dazu geführt, dass auf der Arbeit auf automatisch generierte Mails (mit Infos über Änderungen im Personalverzeichnis) mit Vacation-Meldungen der angeschriebenen Mitarbeiterinnen geantwortet wurde.

Um dies zu verhindern, sollte es ausreichen, wenn dem automatisch generiert Mail folgende zwei Header-Zeilen mitgegeben werden:

...
Precedence: bulk
Auto-submitted: auto-generated
...

Die meisten aktuellen Mail-Server sollten auf solche Mails nicht mehr mit einer Vacation-Meldung reagieren.

PHP Mailer

In meinem konkreten Fall sah die Anpassung im PHP-Script folgendermassen aus (ich verwende die vorzügliche Klasse PHP Mailer, um Mails zu generieren und zu versenden):

...
$mail->AddCustomHeader('Precedence: bulk');
$mail->AddCustomHeader('Auto-submitted: auto-generated');
...

Und still ward’s auf dem Web-Server …

Tags: , , ,
Labels: Allgemein

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 27. November 2008

Mail.app für Plain Text-Fans

Endlich werden HTML-Mails, die all die unbeirrbaren Office-Benutzer da draussen verfasst haben, mit anständiger Schriftgrösse dargestellt (vorher war es etwa Arial, 8pt):

defaults write com.apple.mail PreferPlainText -bool TRUE
defaults write com.apple.mail MinimumHTMLFontSize 14

Via: Make HTML messages readable in Apple Mail

Tags: , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Freitag, 23. Mai 2008

Das RTC mag Mails mit PNG-Dateien nicht

Krass, sowas habe ich ja noch nie erlebt:

host mail2.rtc.ch[195.65.71.90] said: 550 Error: Sorry,
    we do not accept .png file types. Wir weisen png-Dateien ab. (in reply to
    end of DATA command)

… ein Wunder, dass sie überhaupt noch ASCII durchlassen *zwinker*

Tags:
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 2. April 2008

Spammer sind auch nur Menschen …

… und machen ab und zu Fehler:

%RANDFILE[./bodies/tb/tb_plain.txt,./bodies/tb/tb_html.txt,./bodies/ol/ol_html.txt]

Das war der Inhalt ein Spam-Mails, das ich am 21. März erhalten habe.

Tags: , ,
Labels: IT, Web

Keine Kommentare | neuen Kommentar verfassen