Проблема с настройкой MailSender Spring для нашего SMTP-сервера (но GMail работает) - PullRequest
3 голосов
/ 12 мая 2009

У меня проблемы с отправкой почты через 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 .

Любая помощь приветствуется!

Ответы [ 5 ]

3 голосов
/ 22 июня 2011

Чтобы добавить для завершения предыдущего ответа с помощью matt b, правильный вариант javamail: smtp.mail.localhost

<property name="javaMailProperties">
    <props>
        <prop key="mail.smtp.localhost">thecompany.net</prop>
    </props>
</property>
1 голос
/ 13 мая 2009

Можете ли вы передать дополнительные свойства (имя хоста), которые необходимо установить с помощью SMTP-сервера, в свойстве javaMailProperties?

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
    <property name="host" value="mail.thecompany.net" />
    <property name="port" value="25" />
    <!-- addition: -->
    <property name="javaMailProperties">
        <props>
            <prop key="hostname">thecompany.net</prop>
        </props>
    </property>
</bean>

Не совсем уверен, какое правильное имя ключа для hostname в JavaMail API.

1 голос
/ 22 мая 2009

Попробуйте добавить свойство mail.smtp.localhost с правильным значением ( thecompany.net ).

0 голосов
/ 12 августа 2016

SMTPTransport mailFrom () устанавливает адрес отправителя в следующем порядке:

SMTPMessage.getEnvelopeFrom()
mail.smtp.from property
From: header in the message
System username using the InternetAddress.getLocalAddress() method

Вам просто нужно добавить свойство from in javaMailProperies на ваш адрес электронной почты

0 голосов
/ 12 мая 2009

Я думаю, это проблема разрешения адресов в вашем случае. убедитесь, что почтовый сервер доступен по указанному имени с компьютера, на котором вы установили этот код. если нет, просто добавьте запись в ваш файл hosts.

...