[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.메일을 보내려는 SMTP 서버가 중계 거부입니다. 문제가없는 자체 로컬 서버 인 경우 구성을 변경하여 mydomain.net에서 메일을 릴레이 할 수 있습니다. 그러나 외부 서버 (예 : gmail) 인 경우 실제 등록 된 도메인을 사용해야합니다.
메일을 보내려는 SMTP 서버가 중계 거부입니다. 문제가없는 자체 로컬 서버 인 경우 구성을 변경하여 mydomain.net에서 메일을 릴레이 할 수 있습니다. 그러나 외부 서버 (예 : gmail) 인 경우 실제 등록 된 도메인을 사용해야합니다.
메일 서버에 대해 코드를 테스트하려면, Apache Web Server를 설치하고, 일부 테스트 사용자를 생성하고 전자 메일을 보내고받는 것이 좋습니다.
-
==============================
2.이 JavaMail FAQ 항목은 다음과 같은 도움이됩니다.
이 JavaMail FAQ 항목은 다음과 같은 도움이됩니다.
-
==============================
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.내가 아는 바로는 전자 메일 서비스가 생산 영역 내에 있어야합니다. 당신은 그 구체의 바깥에서 prod smtp 서버를 칠 수 없습니다. 적어도 그것은 내가 만난 이슈의 경우였다.
내가 아는 바로는 전자 메일 서비스가 생산 영역 내에 있어야합니다. 당신은 그 구체의 바깥에서 prod smtp 서버를 칠 수 없습니다. 적어도 그것은 내가 만난 이슈의 경우였다.
from https://stackoverflow.com/questions/21884126/exception-in-sending-emails-from-java-application-relaying-denied by cc-by-sa and MIT license