일단 이건 작성하려고 했는데 어쩌다보니 계속 뒤로 밀리게되어 이제 작성하게 되었습니다. 제가 초창기 신입일때  회사 홈페이지를 프론트쪽을 수정 후 재시작할일 있어서 재시작하였는데 사수도 없고 인수인계도 잘 되어 있지 않는 상태에서 자신감 넘치게 재시작을 눌렀습니다. ㅎㅎ ㅠ 
 
그때 당시에 문제가 발생한게 갑작스레 메일들이 나갔는데... ㅠ 당시 엄청 호되게 혼났엇습니다. 잘모르면 일단 확인을 철저히 하고 했어야했는데 뭐 핑계라면 인수인계 부족.... ㅎ 아무튼 확인 안한 제잘못이 큽니다.. 사실 post -fix 메일에 대한 존재 조차 몰랐기 때문에 무지로 인한 문제라고 생각했습니다. 만약에 제가 전체적으로 웹서비스에 대한 이해도가 높고 서버에 대한 이해도가 높았다면 다양한 시각으로 체크 후 재시작을 했을거라고 생각합니다.  
 
그렇다면 post-fix 메일이 뭘까요? 일단 인프라쪽은 정확하게 모르는 부분이 상당히 많아서 .... ㅠ 예전에 java.mail은 구현은 해봤지만 실제적으로 smtp에 대한 이해도는 상당히 낮습니다... 그렇다면 postfix email은?
https://www.lesstif.com/1stb/postfix-email-18219586.html

Postfix Email 서버

# 메일 서버의 도메인 이름을 설정한다. fully-qualified domain name 이어야 한다. myhostname = mail.example.com # 도메인 이름을 설정한다. mydomain 을 특별히 설정하지 않을 경우 myhostname 에 설정된 값에서 첫

www.lesstif.com

링크의 말을 빌리면 
sendmail 같은 SMTP(Simple Mail Transfer Protocl) 를 구현한 소프트웨어를 MTA(Mail Transfer Agent) 라고 부르며 MS의 아웃룩이나 모질라의 썬더버드, 콘솔에서 구동되는 mutt 등의 사용자 프로그램은 MUA(Mail User Agent) 라고 분류한다. 
sendmail 은 전통적으로 많이 사용되던 MTA 였고 RHEL 5 까지는 기본 메일 서버 데몬이었으나 RHEL 6 부터는 postfix 로 교체되었다. 물론 원하는 사용자는 sendmail 을 MTA 로 사용하는 것도 가능하다.
 
말그대로 리눅스에서 제공하는 메일서비스인듯합니다. 
그렇다면 smtp란 뭘까요?
 
https://ko.wikipedia.org/wiki/%EA%B0%84%EC%9D%B4_%EC%9A%B0%ED%8E%B8_%EC%A0%84%EC%86%A1_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

간이 우편 전송 프로토콜 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)은 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 사용하는 TCP 포트번호는 25번이다. 상

ko.wikipedia.org

간이 전자 우편 전송 프로토콜(Simple Mail Transfer Protocol, SMTP)은 인터넷에서 이메일을 보내기 위해 이용되는 프로토콜이다. 사용하는 TCP 포트번호는 25번이다. 상대 서버를 지시하기 위해서 DNS의 MX레코드가 사용된다. RFC2821에 따라 규정되어 있다. 메일 서버간의 송수신뿐만 아니라, 메일 클라이언트에서 메일 서버로 메일을 보낼 때에도 사용되는 경우가 많다.
 
말그대로 메일끼리 서로 주고 받는거라고 생각하면 편합니다.
smtp 사용법은 인터넷에 많으니 참고하시면 되고요.
사용할때 사전지식을 일단 잘 알고넘어가는게 더 중요해서 
 
SMTP는 Simple Mail Transfer Protocol의 약자입니다. 인터넷을 통해 이메일 메시지를 보내고 받는 데 사용되는 통신 프로토콜입니다. 메일 서버 및 기타 메시지 전송 에이전트(MTA)는 SMTP를 사용하여 메일 메시지를 보내고, 받고, 중계합니다.
 
SMTP 포트란?
https://www.cloudflare.com/ko-kr/learning/email-security/smtp-port-25-587/
 
SMTP와 같은 대부분의 네트워킹 프로토콜은 특정 포트로 이동하도록 설계되어 있습니다. 네트워킹에서 포트는 컴퓨터 내의 가상 위치입니다.
 
SMTP 포트번호는?
https://inpa.tistory.com/entry/LINUX-%F0%9F%93%9A-%EC%9C%88%EB%8F%84%EC%9A%B0-%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8F%AC%ED%8A%B8-%EC%A0%95%EB%A6%AC

🐧 리눅스 주요 포트 번호 종류

리눅스 포트 자주 쓰이는 포트 종류를 표로 나열해 보았다. 보라색으로 강조된 부분만 봐도 충분하다. 이밖의 자세한 포트 종류들은 리눅스 디렉토리 /etc/services 에서 확인할 수 있다. 윈도우 포

inpa.tistory.com

리눅스는 25번인데요. 
 
음 제가 이전에 API 개발하면서 예외발생시 오류건을 메일로 전송해주는걸 구현한적이 있습니다.
그떄도 아마 25번을 이용했었습니다. 윈도우 서버 OS였습니다. 
이상 smtp에 대해서 알아봤고요.
 
아래는 간단한 smtp를 이용한  자바 코드가 있습니다.

import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

import org.springframework.stereotype.Service;

@Service("MailService")
public class MailService {

	/** 메일 HOST **/
	private static final String HOST = IP주소;// smtp.naver.com
	/** 메일 PORT **/
	private static final String PORT = 포트번호;// 25, 587
	/** 메일 ID **/
	private static final String MAIL_ID = "송신자 이메일";
	/** 메일 PW **/
	private static final String MAIL_PW = "송신자 비밀번호";

	/*수신자 이메일*/
	private String email_to_1 = "메일아이디1";
	private String email_to_2 = "메일아이디2";
	private String email_to_3 = "메일아이디3";

	public MailService() {

	}

	public MailService(String email_to_1, String email_to_2, String email_to_3) {
		this.email_to_1 = email_to_1;
		this.email_to_2 = email_to_2;
		this.email_to_3 = email_to_3;
	}

	private void sendMail(String subject, String body, boolean bMail) {

		try {
			if(bMail==false){
            //메일 보낼지 말지 
				return;
			}

			InternetAddress[] receiverList = new InternetAddress[2];
			receiverList[0] = new InternetAddress(email_to_1);
			receiverList[1] = new InternetAddress(email_to_2);

			// SMTP 발송 Properties 설정
			Properties props = new Properties();
			props.put("mail.transport.protocol", "smtp");
			props.put("mail.smtp.host", MailService.HOST);
			props.put("mail.smtp.port", MailService.PORT);
			props.put("mail.smtp.starttls.enable", "true");
			props.put("mail.smtp.ssl.trust", MailService.HOST);
			props.put("mail.smtp.auth", "true");

			// SMTP Session 생성
			Session mailSession = Session.getDefaultInstance(props,
					new javax.mail.Authenticator() {
						@Override
						protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
							return new javax.mail.PasswordAuthentication(
									MailService.MAIL_ID, MailService.MAIL_PW);
						}
					});

			// Mail 조립
			Message mimeMessage = new MimeMessage(mailSession);
			mimeMessage.setFrom(new InternetAddress(MailService.MAIL_ID,"제목"));
			mimeMessage.setHeader(MailService.MAIL_ID, "mymessage");
			mimeMessage.setRecipients(Message.RecipientType.TO, receiverList);
			// 메일 제목
			mimeMessage.setSubject(MimeUtility.encodeText(subject, "utf-8", "B"));
			// 메일 본문 (.setText를 사용하면 단순 텍스트 전달 가능)
			mimeMessage.setContent(body, "text/html; charset=UTF-8");
			// Mail 발송
			Transport.send(mimeMessage);
		} catch (Exception e) {
			log.debug("email 전송 오류");
		}
	}
    
	/*API JSON DATA ERROR 메일 내용*/
	public void sendNotiMail(String subject, String message, String url,
			String jsonData, String inputdata, String jsonErr, String empty,boolean bMail) {
		String body = "<b>Err Message</b>:"
				+ "<br>"
				+ message
				+ "<br><br>"
				+ "<b>APIURL</b>:"
				+ "<br>"
				+ url.replace("&reg", "&amp;reg")
				+ "<br><br>"
				+ "<b>json parse err msg</b>:"
				+ "<br>"
				+ jsonErr
				+ "<br><br>"
				+ "<b>parse json data</b>:"
				+ jsonData.replaceAll("\\{", "<br>{&nbsp;&nbsp;&nbsp;&nbsp;")
						  .replaceAll(",", "<br>&nbsp;&nbsp;&nbsp;&nbsp;")
				+ "<br><br>"
				+ "<b>input data:</b>"
				+ inputdata.replaceAll(",", ",<br>&nbsp;&nbsp;&nbsp;&nbsp;")
						.replaceAll("\\{", "<br>{&nbsp;&nbsp;&nbsp;&nbsp;");
		sendMail(subject, body,bMail);
	  }
      ......
    }

 

+ Recent posts