복붙노트

[SPRING] 자바 응용 프로그램에서 전자 메일을 보내는 중 예외 : 릴레이가 거부되었습니다.

SPRING

자바 응용 프로그램에서 전자 메일을 보내는 중 예외 : 릴레이가 거부되었습니다.

우리는 스프링 메일을 사용하여 자바 애플리케이션으로부터 이메일을 전송합니다. org.springframework.mail.javamail.JavaMailSenderImpl

봄 이메일 구성

<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
test.email.username=demo@mydomain.net
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 <demo@mydomain.net>... Relaying denied

해결법

  1. ==============================

    1.메일을 보내려는 SMTP 서버가 중계 거부입니다. 문제가없는 자체 로컬 서버 인 경우 구성을 변경하여 mydomain.net에서 메일을 릴레이 할 수 있습니다. 그러나 외부 서버 (예 : gmail) 인 경우 실제 등록 된 도메인을 사용해야합니다.

    메일을 보내려는 SMTP 서버가 중계 거부입니다. 문제가없는 자체 로컬 서버 인 경우 구성을 변경하여 mydomain.net에서 메일을 릴레이 할 수 있습니다. 그러나 외부 서버 (예 : gmail) 인 경우 실제 등록 된 도메인을 사용해야합니다.

    메일 서버에 대해 코드를 테스트하려면, Apache Web Server를 설치하고, 일부 테스트 사용자를 생성하고 전자 메일을 보내고받는 것이 좋습니다.

  2. ==============================

    2.이 JavaMail FAQ 항목은 다음과 같은 도움이됩니다.

    이 JavaMail FAQ 항목은 다음과 같은 도움이됩니다.

  3. ==============================

    3.작업 코드,

    작업 코드,

    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();
    
        }
    
    }
    
  4. ==============================

    4.내가 아는 바로는 전자 메일 서비스가 생산 영역 내에 있어야합니다. 당신은 그 구체의 바깥에서 prod smtp 서버를 칠 수 없습니다. 적어도 그것은 내가 만난 이슈의 경우였다.

    내가 아는 바로는 전자 메일 서비스가 생산 영역 내에 있어야합니다. 당신은 그 구체의 바깥에서 prod smtp 서버를 칠 수 없습니다. 적어도 그것은 내가 만난 이슈의 경우였다.

  5. from https://stackoverflow.com/questions/21884126/exception-in-sending-emails-from-java-application-relaying-denied by cc-by-sa and MIT license