Это довольно длинный вопрос с длинным списком проверенных вещей и трудностей, поэтому, пожалуйста, потерпите меня. Резюме таково.
Более подробная информация приведена ниже. У меня есть машина в облаке Amazon, на которой я выполняю кучу заданий и хочу, чтобы статусы отправлялись мне по почте. Я использую office365 на работе, поэтому хочу пересылать почту через office365. Я больше всего знаком с постфиксом, поэтому использовал его как MTA.
Конфигурация ubuntu 12.04LTS
; Я установил postfix и mail-утилиты.
В этом примере позвольте мне сказать, что моя компания "company.com
"и рассматриваемая машина (через эластичный IP-адрес и запись DNS) называется"plaything.company.com
". hostname установлено на"plaything.company.com
", так это /etc/mailname
На игрушке у меня зарегистрированы следующие пользователи alpha
, bravo
, и charlie
.
У меня есть следующие файлы конфигурации.
alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no config_directory = /etc/postfix inet_interfaces = all inet_protocols = ipv4 mailbox_size_limit = 0 mydestination = plaything.company.com, localhost.company.com, , localhost myhostname = plaything.company.com mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = /etc/mailname readme_directory = no recipient_delimiter = + relayhost = [smtp.office365.com]:587 sender_canonical_maps = hash:/etc/postfix/sender_canonical smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_use_tls = yes smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls = yes
Как машина называется plaything.company.com
Я выполнил упражнение по регистрации всех соответствующих записей DNS, чтобы office365 узнал, что я принадлежу plaything.company.com
и позволил мне создать пользователя с именем daemon@plaything.company.com
в office365.
В office365 я настраиваю daemon@plaything.company.com
как имеющий другой адрес электронной почты alpha@company.com
.
Затем я сделал следующее sender_canonical
alpha@plaything.company.com alpha@company.com
Я создал файл sasl_passwd, который гласит:
smtp.office365.com daemon@plaything.company.com:123456password123456
скажем так, что пароль для daemon@plaything.company.com
является 1234...456
После всех этих настроек войдите как alpha
и
mail bravo@company.com Cc: Subject: test test
и все это прекрасно работает. электронная почта отправляется с помощью постфикса, TLS работает как чемпион, аутентифицируется как daemon@...
а bravo@company.com в Office365 получает сообщение электронной почты.
Проблема возникает при входе в систему как bravo
к машине.
отправитель bravo@plaything.company.com
и office365 говорит:
status=bounced (host smtp.office365.com[132.245.12.25] said: 550 5.7.1 Client does not have permissions to send as this sender (in reply to end of DATA command))
это потому, что я пытаюсь отправить почту как bravo@...
и аутентификация в office365 как daemon@...
. Причина, по которой это работает alpha@...
потому что в office365 я настраиваю daemon@plaything.company.com
как имеющий другой адрес электронной почты alpha@company.com
.
В Postfix Relay в Office365, Майлз Эриксон отвечает на вопрос так:
Не отправляйте почту в Office365 как пользователь из своего почтового домена, размещенного в Office365. Вместо этого используйте субдомен, например address@services.mydomain.com вместо address@mydomain.com. Не повредит настроить запись SPF для services.mydomain.com или того, что вы решите использовать.
Не проходите аутентификацию на mail.messaging.microsoft.com как пользователь Office365. Просто подключитесь к порту 25 и доставьте почту в свой домен, как это сделал бы любой внешний SMTP-агент.
Хорошо, я сделал №1, у меня есть эти записи в DNS, но по большей части они не актуальны, если Office365 признает, что домен принадлежит мне.
Вот эти записи:
Записи CNAME: - msoid.plaything.company.com - autodiscover.plaything.company.com
Запись MX: - plaything.company.com (plaything-company-com.mail.protection.outlook.com)
Запись TXT: - plaything.company.com (v = spf1 include: spf.protection.outlook.com -all)
Я пробовал №2, но, что бы я ни делал, office365 просто отбрасывает соединение со словами «не аутентифицировано». Я могу попробовать даже простой Telnet на порт 25 и попытаться отправить, но он не работает.
250 BY2PR01CA007.outlook.office365.com Hello [54.221.245.236]
530 5.7.1 Client was not authenticated
Connection closed by foreign host.
Есть ли кто-нибудь, у кого есть такая конфигурация, когда несколько пользователей на Linux-машине могут ретранслировать почту с помощью postfix через office365? Должен быть кто-то, кто сделает это, кто может сказать мне, что не так с моей настройкой ...
Думаю, нужно сделать шаг назад :)
Если вы вошли в систему plaything
так как bravo
, вам действительно нужно, чтобы вся почта, отправляемая с игрушки, отправлялась как bravo@company.com
? Если нет, просто отправьте всю почту как daemon@company.com
, видеть Postfix на хостах без реального имени хоста в Интернете.
Если вы не можете применить это, вам понадобится Карты SASL, зависящие от отправителя. Это добавит сложности вашей настройке, поэтому я бы очень постарался этого избежать.
И последнее, но не менее важное: если plaything
будет отправлять письма как user@service.company.com
, вам нужно настроить myhostname
и / или myorigin
а также избавиться от relayhost
настройка. В таком случае, plaything
доставляет всю почту напрямую, со всеми плюсами и минусами, такими как репутация почтового сервера и так далее.