У меня проблемы с отправкой почты через SMTP с использованием интерфейса Spring MailSender и конкретной реализации JavaMailSenderImpl . Я могу отправлять почту через GMail, но не через SMTP-сервер нашей компании ( Postfix ).
Правильные конфигурации
Чтобы убедиться, что у меня правильная конфигурация, я использовал превосходного отправителя почты ssmtp . Это простая утилита (которая может эмулировать Sendmail) и используется исключительно для отправки почты через SMTP.
Ниже приведены две команды, которые я использовал для отправки почты. Первый для GMail, второй для SMTP-сервера нашей компании. Обе письма пришли как надо, и поэтому следующие файлы конфигурации верны.
$ ssmtp -C gmail-smtp.conf john.doe@gmail.com < gmail-message.txt
$ ssmtp -C other-smtp.conf john.doe@thecompany.net < other-message.txt
Содержимое файлов конфигурации ssmtp и файлов сообщений приведено ниже. Как файл конфигурации структурирован, можно увидеть по адресу: http://linux.die.net/man/5/ssmtp.conf:
Gmail-message.txt:
To: john.doe@gmail.com
From: john.doe@gmail.com
Subject: Sent using the SMTP-server of GMail
Some content.
Gmail-smtp.conf:
mailhub=smtp.gmail.com:587
UseSTARTTLS=yes
AuthUser=john.doe@gmail.com
AuthPass=john_password
другая-message.txt:
To: john.doe@thecompany.net
From: john.doe@thecompany.net
Subject: Sent using the SMTP-server of TheCompany
Some content.
другой-smtp.conf:
# No username or password = no authentication
hostname=thecompany.net
mailhub=mail.thecompany.net:25
Конфигурация MailSender, которая работает против GMail
Я успешно отправляю почту через GMail, используя эту конфигурацию Spring MailSender:
...
<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="host" value="smtp.gmail.com" />
<property name="port" value="587" />
<property name="username" value="john.doe@gmail.com" />
<property name="password" value="john_password" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
...
Проблема (отправка через фирменный SMTP-сервер)
С этой конфигурацией MailSender:
...
<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="host" value="mail.thecompany.net" />
<property name="port" value="25" />
</bean>
...
Я получаю это исключение:
org.springframework.mail.MailSendException; nested exceptions (1) are:
Failed message 1: javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 504 5.5.2 <rat>: Helo command rejected: need fully-qualified hostname
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:422)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:308)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:297)
... (The rest are methods I've created, which are irrelevant)
I также get 504 5.5.2: Команда Helo отклонена: необходимо полное имя хоста , если я удаляю hostname = thecompany.net из other-smtp.conf с использованием ssmtp . Я думаю, я должен как-то указать имя хоста. Мои компьютеры зовут rat , но похоже, что он хочет thecompany.net .
Любая помощь приветствуется!