Вопрос или проблема
Я настроил msmtp
на своем сервере для отправки писем через Zoho. Для этого я настроил явный адрес отправителя ([email protected]
для этого примера) в конфигурации msmtp:
defaults
account default
auth on
from [email protected]
host smtp.zoho.eu
logfile ~/.msmtp.log
passwordeval cat /secrets/smtp_password.txt
port 587
tls on
Это, конечно, необходимо, потому что Zoho будет принимать только письма с этим адресом отправителя.
И когда я использую его в командной строке, все работает идеально:
echo -e "subject: test\n\nhello" | msmtp -- [email protected]
Логи показывают, что это работает, и я получаю свое письмо:
Sep 25 09:01:55 host=smtp.zoho.eu tls=on auth=on user=user [email protected] [email protected] mailsize=164 smtpstatus=250 smtpmsg='250 Message received' exitcode=EX_OK
Но когда я настраиваю crontab:
[email protected]
[email protected]
0 * * * * myuser echo 'not working' && exit 1
Я получаю это в своем журнале msmtp:
Sep 25 09:00:38 host=smtp.zoho.eu tls=on auth=on user=user [email protected] [email protected] smtpstatus=553 smtpmsg='553 Relaying disallowed as @' errormsg='сервер не принял письмо' exitcode=EX_UNAVAILABLE
Мне это странно, адрес отправителя в журнале правильный, но ошибка означает, что я установил неправильный адрес отправителя, или нет?
Настройка cron устанавливает адрес отправителя другим способом, который я не вижу в логах?
Могу ли я это изменить?
Ответ или решение
Чтобы решить проблему с ошибкой "553 Relaying disallowed as @" при отправке писем через msmtp с использованием cron, необходимо обратить внимание на несколько возможных причин и настроек.
1. Фоновый процесс cron и переменные окружения
При запуске задач через cron среда отличается от вашей обычной пользовательской среды. Это может означать, что некоторые переменные окружения, необходимые для корректной работы msmtp, отсутствуют.
2. Настройка msmtp в crontab
Убедитесь, что в вашем crontab правильно указаны переменные, если они требуются. Например, ваш crontab может выглядеть так:
MAIL_FROM="[email protected]"
0 * * * * myuser echo 'not working' | msmtp --from="$MAIL_FROM" -- "$RECIPIENT_EMAIL"
3. Ошибка "Relaying disallowed"
Это сообщение об ошибке указывает на то, что сервер не принимает почту с указанным адресом отправителя. Ваша конфигурация для msmtp
должна являться единственной причиной ее возникновения. Убедитесь, что в конфигурации msmtp указаны верные данные для аутентификации и адреса отправителя. Проверьте следующее:
- Убедитесь, что вы используете правильный адрес, который разрешён для отправки через аккаунт Zoho.
- Проверьте, чтобы в конфигурационном файле msmtp (обычно в
~/.msmtprc
) адрес отправителя совпадал с тем, что разрешает сервер.
Если вы хотите определить, как именно cron отправляет почту, вы можете добавить отладочные сообщения (например, в лог) или использовать logger
для регистрации событий.
4. Прямое указание адреса в командной строке
Вы также можете прямо указать адрес отправителя в команде cron:
0 * * * * myuser echo 'not working' | msmtp --from="[email protected]" -- "[email protected]"
Это гарантирует, что адрес отправителя установлен явно.
5. Изоляция проблемы
Для управления журналами и отладки выполните следующее:
- Проверьте официальную документацию
msmtp
для любых специальных параметров, которые могут потребоваться для вашего случая. - Используйте
mail
или другие инструменты для проверки, корректно ли отправляется почта из cron-среды.
6. Проверка логов
Обратите внимание на логи msmtp, чтобы выявить более подробную информацию об ошибке. Если вы видите одну и ту же ошибку, как упоминалось в вашем вопросе, возможно, вы столкнулись с конфигурационной проблемой, которая не была учтена.
Если все вышеуказанные шаги не помогли, рекомендуется:
- Проверить настройки вашего SMTP-сервера на предмет разрешений и параметров.
- Обратиться в службу поддержки Zoho для получения дополнительных рекомендаций и уточнений, касающихся их политики.
Заключение
Следуя данным рекомендациям, вы сможете устранить проблему с ошибкой "553 Relaying disallowed as @", и ваши задачи в cron будут успешно отправлять почту через msmtp.