Письма, отправленные с помощью postfix, рассматриваются как спам, а иногда и вовсе не доставляются.

Письма, отправленные с помощью postfix, рассматриваются как спам, а иногда и вовсе не доставляются.

Я пытаюсь настроить отправку писем с помощью SMTP на моем VPS под управлением Ubuntu 18.04. Я использую postfix, nodemailer.

Когда я отправляю из[email protected], на аккаунт gmail, он застревает в папке спама gmail. Я получил оценку 6.8 наwww.mail-tester.com, с этими вычетами:

-1.274 RDNS_NONE Доставлено во внутреннюю сеть хостом без rDNS Это может означать, что для вашего имени хоста не настроен rDNS или rDNS не соответствует IP-адресу отправителя

-0.896 SPF_HELO_SOFTFAIL SPF: HELO не соответствует записи SPF (мягкий сбой) мягкий сбой

Ваше сообщение не подписано DKIM

Я думаю, что моя запись TXT верна:

"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:

  "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
  });

решение1

  1. Настройте обратный DNS. Добавьте запись PTR, связывающую ваш IP с именем вашего сервера MX.

  2. Убедитесь, что myhostname в main.cf установлено на имя вашего сервера MX. Это, вероятно, является причиной несоответствия HELO.

  3. Вы можете установить SPF на «v=spf1 a mx include:_spf.mail.hostinger.com ~all», чтобы автоматически принимать ваши MX в качестве отправителей, но с IP все должно быть в порядке.

  4. Зарегистрируйте свой домен в Google, чтобы улучшить доставляемость:https://support.google.com/a/answer/9649569?hl=ru

  5. Обязательно используйте DKIM:

opendkim

Установите opendkim.

Настроить

Отредактируйте /etc/opendkim.conf:

  • svрежим для подписи и проверки входящих писем (режим проверки может вам не понадобиться)
  • СообщитьАдрес[email protected]
  • KeyTable, SigningTable: файлы, связывающие ключи с записями DNS
  • InternalHosts: файл, содержащий список доверенных хостов.

Создать ключи

mkdir /etc/opendkim/keys/example.com/
cd /etc/opendkim/keys/example.com/
opendkim-genkey -s mail -d example.com
chown opendkim:opendkim mail.*

Параметр -sназывается селектором, -dэто домен.

Редактировать/etc/opendkim/Таблица подписейи добавьте пару домен/селектор:

*@example.com mail._domainkey.example.com.

Редактировать/etc/opendkim/Таблица ключейи добавьте пару селектор/ключ:

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

Редактировать/etc/opendkim/TrustedHostsи вставить

*.example.com
[your local network]

ДНС

Вам нужно добавить ваш открытый ключ в ваш DNS. Вы найдете ключ в/etc/opendkim/keys/xxx.yy/mail.txt

Создайте поле TXT:

mail._domainkey.example.com 10800 TXT "v=DKIM1; k=rsa; p=very_long_key"

постфикс

Вам нужно сообщить Postfix об opendkim, чтобы он подписал ключи.

Получите метод подключения для opendkim в его конфигурации. Должно быть что-то вроде inet:8891@localhost, и добавьте его как фильтр вmain.cf:

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

Завершить

Перезапустите (в конце концов включите) opendkim, а затем postfix. Проверьте ключ в вашем DNS с помощьюopendkim-testkey -d example.com -s mail -vvv

Проверьте с помощью mail-tester.com. Проверьте в /var/log/maillog, что каждое отправленное письмо добавляет строкуDKIM-Signature field added

Связанный контент