Ich versuche, das Senden von E-Mails mit SMTP auf meinem VPS mit Ubuntu 18.04 einzurichten. Ich verwende Postfix, Nodemailer.
Wenn ich von einem[email geschützt], an ein Gmail-Konto, bleibt es im Gmail-Spam-Ordner hängen. Ich habe eine Punktzahl von 6,8 aufwww.mail-tester.com, mit diesen Abzügen:
-1.274 RDNS_NONE Von einem Host ohne rDNS an das interne Netzwerk übermittelt. Dies kann darauf hinweisen, dass Sie für Ihren Hostnamen kein rDNS konfiguriert haben oder dass das rDNS nicht mit Ihrer sendenden IP übereinstimmt.
-0.896 SPF_HELO_SOFTFAIL SPF: HELO stimmt nicht mit dem SPF-Eintrag überein (Softfail) Softfail
Ihre Nachricht ist nicht mit DKIM signiert
Ich denke, mein TXT-Eintrag ist korrekt:
"v=spf1 ip4:[removed-server-ip] include:_spf.mail.hostinger.com ~all"
/etc/postfix/main.cf:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = [removed-domain-name].com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost.[removed-domain-name].com, [removed-domain-name].com, [removed-domain-name]$
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policyd-spf
Nodemailer-Methode:
"use strict";
const nodemailer = require("nodemailer");
let transporter = nodemailer.createTransport({
sendmail: true,
newline: 'unix',
path: '/usr/sbin/sendmail',
secure: true,
})
let info = await transporter.sendMail({
from: '"[removed-domain-name].com" <no-reply@[removed-domain-name].com>', // sender address
to: req.body.to, // list of receivers
subject: "Hello", // Subject line
text: req.body.message, // plain text body
html: req.body.message, // html body
});
Antwort1
Konfigurieren Sie Ihren Reverse-DNS. Fügen Sie einen PTR-Eintrag hinzu, der Ihre IP mit Ihrem MX-Servernamen verknüpft
Stellen Sie sicher, dass myhostname in main.cf auf Ihren MX-Servernamen eingestellt ist. Dies ist wahrscheinlich die Ursache für Ihre HELO-Nichtübereinstimmung.
Sie können Ihren SPF auf „v=spf1 a mx include:_spf.mail.hostinger.com ~all“ einstellen, um Ihren MX automatisch als Absender zu akzeptieren, aber mit der IP sollte es auch kein Problem sein.
Registrieren Sie Ihre Domain bei Google, um die Zustellbarkeit zu verbessern:https://support.google.com/a/answer/9649569?hl=de
Verwenden Sie unbedingt DKIM:
opendkim
Installieren Sie opendkim.
Konfigurieren
Bearbeiten Sie /etc/opendkim.conf:
sv
Modus zum Signieren und Verifizieren eingehender E-Mails (den Verifizierungsmodus benötigen Sie möglicherweise nicht)- Berichtsadresse[email geschützt]
- KeyTable, SigningTable: Dateien, die die Schlüssel mit DNS-Einträgen verknüpfen
- InternalHosts: eine Datei mit einer Liste vertrauenswürdiger Hosts
Erstellen der Schlüssel
mkdir /etc/opendkim/keys/example.com/
cd /etc/opendkim/keys/example.com/
opendkim-genkey -s mail -d example.com
chown opendkim:opendkim mail.*
Der Parameter -s
heißt Selektor und -d
ist die Domäne.
Bearbeiten/etc/opendkim/SigningTableund fügen Sie ein Paar aus Domänen/Selektoren hinzu:
*@example.com mail._domainkey.example.com.
Bearbeiten/etc/opendkim/Schlüsseltabelleund fügen Sie ein Selektor/Schlüssel-Paar hinzu:
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
Bearbeiten/etc/opendkim/TrustedHostsund einfügen
*.example.com
[your local network]
DNS
Sie müssen Ihren öffentlichen Schlüssel in Ihr DNS einfügen. Sie finden den Schlüssel in/etc/opendkim/keys/xxx.yy/mail.txt
Erstellen Sie ein TXT-Feld:
mail._domainkey.example.com 10800 TXT "v=DKIM1; k=rsa; p=very_long_key"
Postfix
Sie müssen Postfix auf Opendkim aufmerksam machen, damit es die Schlüssel signiert.
Holen Sie sich die Verbindungsmethode für OpenDKIM in der Konfiguration. Sie sollte etwa so aussehen inet:8891@localhost
und als Filter inmain.cf:
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
Abschließen
Starten Sie opendkim neu (und aktivieren Sie es ggf.) und dann postfix. Überprüfen Sie den Schlüssel in Ihrem DNS mitopendkim-testkey -d example.com -s mail -vvv
Überprüfen Sie mit mail-tester.com. Überprüfen Sie in /var/log/maillog, ob jeder gesendeten E-Mail eine Zeile hinzugefügt wirdDKIM-Signature field added