Исключение при отправке электронных писем из Java-приложения: ретрансляция запрещена

Мы используем Spring Mail для отправки электронных писем из java-приложения org.springframework.mail.javamail.JavaMailSenderImpl.

Конфигурация электронной почты Spring

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" autowire-candidate="default">
        <property name="host" value="${test.email.host}" />
        <property name="port" value="${test.email.port}" />
        <property name="username" value="${test.email.username}" />
        <property name="password" value="${test.email.password}" />
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>

            </props>
        </property>
    </bean>

Снимок кода Java

    @Autowired(required = true)
    @Qualifier("errorMessageMailSender")
    JavaMailSenderImpl mailSender;

    ..............
    ..............

          try {
                MimeMessage mailMessage = buildEmailMimeMessage(properties,mimeMultipart);
                logger.info(String.format("Built MimeMessage object is <%s>",mailMessage));
                if (mailMessage != null) {
                    mailSender.send(mailMessage);
                    logger.info("Mail sent Successfully");
                }else{
                    logger.info("Mail send failed as Mail message object construction failed.");
                }
                result=true;
            } catch (Exception e) {
                logger.error("An exception occurred while sending mail :: " + e.getMessage());
            }

Файлы свойств

test.email.host=mail.mydomain.net
test.email.port=2525
[email protected]
test.email.password=mypassword

Но мы ниже исключения, и электронная почта не отправляется

An exception occurred while sending mail :: Failed messages: javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
    com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 <[email protected]>... Relaying denied

person Rahul Agrawal    schedule 19.02.2014    source источник
comment
Проверьте gammadyne.com/relaying_denied.htm, первый результат Google.   -  person Sachin Gorade    schedule 19.02.2014
comment
Это проблема SMTP, а не проблема Java...   -  person fge    schedule 19.02.2014
comment
если я оставлю свои свойства имени пользователя и пароля пустыми, будет ли для свойства smtp auth установлено значение true, вызовет ли эта проблема?   -  person Rahul Agrawal    schedule 19.02.2014


Ответы (4)


Сервер smtp, на который вы пытаетесь отправить почту, отказывается от ретрансляции. Если это ваш собственный локальный сервер, это не проблема, вы можете изменить настройки для ретрансляции почты с вашего mydomain.net . Но если это внешний сервер (например, gmail), вы должны использовать реальный зарегистрированный домен.

Чтобы протестировать свой код на почтовом сервере, я рекомендую вам настроить докеризированный сервер Apache James, создать на нем несколько тестовых пользователей и отправлять и получать электронные письма.

person Özgür Eroğlu    schedule 19.02.2014


Рабочий код,

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaEmail {

    Properties emailProperties;
    Session mailSession;
    MimeMessage emailMessage;

    public static void main(String args[]) throws AddressException,
            MessagingException {

        JavaEmail javaEmail = new JavaEmail();

        javaEmail.setMailServerProperties();
        javaEmail.createEmailMessage();
        javaEmail.sendEmail();
    }

    public void setMailServerProperties() {

        String emailPort = "587";//gmail's port

        emailProperties = System.getProperties();
        emailProperties.put("mail.smtp.port", emailPort);
        emailProperties.put("mail.smtp.auth", "true");
        emailProperties.put("mail.smtp.starttls.enable", "true");

    }

    public void createEmailMessage() throws AddressException,
            MessagingException {
        String[] toEmails = { "enter to mail ids" };
        String emailSubject = "Java Email";
        String emailBody = "This is an email sent by JavaMail api.";

        mailSession = Session.getDefaultInstance(emailProperties, null);
        emailMessage = new MimeMessage(mailSession);

        for (int i = 0; i < toEmails.length; i++) {
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
        }

        emailMessage.setSubject(emailSubject);
        emailMessage.setContent(emailBody, "text/html");//for a html email
        //emailMessage.setText(emailBody);// for a text email

    }

    public void sendEmail() throws AddressException, MessagingException {

        String emailHost = "smtp.gmail.com";
        String fromUser = "enter from Id";//ignore gmail domain
        String fromUserEmailPassword = "enter password";

        Transport transport = mailSession.getTransport("smtp");

        transport.connect(emailHost, fromUser, fromUserEmailPassword);
        transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
        transport.close();

    }

}
person Mounika Nannaka    schedule 22.02.2016

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

person Rahil    schedule 11.05.2016