์๋ฒ์์ ์ด๋ฉ์ผ ์ ์กํ๋ ๊ฑธ ๊ตฌํํ๊ธฐ ์ํด ์์๋ณด๋ ์ค.. SMTP๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋๋ฐ
ํ์์ ์์๋ฃฉ์์ ์ค์ ํ ๋๋ ์ฌ๋ด ๋ฉ์ผ์ ์ค์ ํ ๋๋ ๋ดค๋ ์น๊ตฌ๋ผ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค
- SMTP๋ ๋ฌด์์ธ์ง
- SMTP ์๋ฒ๊ฐ ๋ญ์ง
- SMTP&DNS
- SMTP ์ฌ์ฉ Port
- SMTP ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1. SMTP (Simple Mail Transfer Protocol)
์ํค๋ฐฑ๊ณผ: ๊ฐ์ด ์ ์ ์ฐํธ ์ ์ก ํ๋กํ ์ฝ์ ์ธํฐ๋ท์์ ์ด๋ฉ์ผ์ ๋ณด๋ด๊ธฐ ์ํด ์ด์ฉ๋๋ ํ๋กํ ์ฝ์ด๋ค.
ํ๋ค์์ ํด์ํ ์ ๋ง ๊ฐ๋จํ ์ค๋ช ์ด๋ค
๋ณดํต SMTP๋ ๋ฉ์ผ์๋ฒ๋ผ๋ฆฌ ๋ฉ์ผ์ ์ฃผ๊ณ ๋ฐ๊ฑฐ๋,
์๋๋ฉด SMTP ์๋ฒ(ex. gmail, naver)์ ๋ฉ์ผ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ๋งบ๊ณ ๋ค๋ฅธ ์๋ฒ์ ๋ฉ์ผ์ ๋ณด๋ด๋ ํ์์ผ๋ก ์ฌ์ฉ๋๋ค
ํน์ง๋ง ๊ฐ๋จํ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค
- ํ ์คํธ ๊ธฐ๋ฐ ํ๋กํ ์ฝ
- ํ๋กํ ์ฝ์ TCP(SSL/TLS)
- SMTP ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ก ๊ตฌ์ฑ
ํต์ ๋ฐฉ๋ฒ์ SMTP ์๋ฒ๋ฅผ ๊ณต๋ถํ๋ฉด ์ฝ๊ฒ ์ ์ ์๋ค
(SMTP์ ๋ ์์ธํ ๋ด์ฉ์ ๋ ์ ํ์ํ๋ค)
2. SMTP ์๋ฒ
๋ณดํต์ ์๋ฒ๋ฅผ ์๊ฐํ๋ฉด, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ ๋ฌด์ธ๊ฐ๋ก ๋๋ ์๊ฐ์ ํ๋ค
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ผ๋ฉด ๋๊ตฐ์ง ๋ณด๊ณ ๋ฐ์์ค์ง ๊ฑฐ์ ํ ์ง๋ ๋ณด๊ธฐ๋ ํ๊ณ ,
๋ค๋ฅธ ์๋ฒ๋ก ๊ฐ๋ผ๊ณ ํ๊ฑฐ๋, ์ํ๋ ์ ๋ณด๋ฅผ ๋ด๋ ค์ฃผ๊ธฐ๋ ํ๋ค
๊ทธ๋ฌ๋ฉด SMTP์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ๋ญ์ง?
์ด๋ฉ์ผ์ ๋ณด๋ผ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ์๋ฅผ ๋ค์ด ๋ฉ์ผ์ ๋ณด๋ด๋ ์ฌ๋์ด sender@gmail.com์ด๊ณ
๋ฉ์ผ์ ๋ฐ๋ ์ฌ๋์ด receiver@naver.com ์ผ ๋๋ฅผ ๋ณด๊ฒ ๋ค
์ด๋ฉ์ผ์ ๋ณด๋ด๋ sender@gmail.com์ SMTP ํด๋ผ์ด์ธํธ๊ฐ ๋ ๊ฒ์ด๊ณ
gmail.com ์ฃผ์๋ ์ด๋ฉ์ผ์ ์ก์์ ํ๋ SMTP ์๋ฒ๋ก ๋ถ๋ฅธ๋ค
(gmail์ SMTP ์๋ฒ ์ฃผ์๋ smtp.gmail.com ์ด๊ณ naver์ SMTP ์๋ฒ ์ฃผ์๋ smtp.naver.com ์ด๋ค)
๊ทธ๋ฌ๋ฉด SMTP ํด๋ผ์ด์ธํธ๋ ๋ฉ์ผ์ ๋ฐ๋ ์๋๋ฐฉ์ธ๊ฐ ํํ ๋
๊ทธ๋ฐ ์ค ์์๋๋ฐ, ๋ฐ๋ receiver@naver.com์ naver.com๋ SMTP ์๋ฒ๋ผ๊ณ ๋ถ๋ฅธ๋ค
(IMAP์ด๋ ๊ฑฐ๋ ์ ๋ชจ๋ฅผ ๊ฑฐ๋ค)
์์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ์๋ฉด, SMTP ์๋ฒ(gmail)--> SMTP ์๋ฒ(naver)๋ก ๋ฉ์ผ์ ๋ณด๋ด๊ณ ์๋ ๋ชจ์์ด๊ณ
gmail๊ณผ naver๋ SMTP ์๋ฒ๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฑธ ์ฐ๊ณ ์๋ ๊ฑฐ๋ค,, ์ฌ์ค ์ด๊ฒ ๋์ด๋ค
ํ๋กํ ์ฝ์ ๊ทธ๋ฅ ๋๋ค๋ฐฉ๋ค์์ ์ฐ๋ ๊ฐ์์ ์ ์ก ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ ๊ฒ ๋ค๋๊น,,
๊ทธ๋ฌ๋ฉด naver.com์ด๋ gmail.com์ ๋๊ฐ ์ด๋ป๊ฒ ์๊ณ ๋ฉ์ผ์ ๋ฐ๋ ค๋ค์ฃผ๋ ๊ฑธ๊น?
3. SMTP & DNS
์ํค๋ฐฑ๊ณผ: ๋๋ฉ์ธ ๋ค์ ์์คํ (Domain Name System, DNS)์ ํธ์คํธ์ ๋๋ฉ์ธ ์ด๋ฆ์ ํธ์คํธ์ ๋คํธ์ํฌ ์ฃผ์๋ก ๋ฐ๊พธ๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๋ณํ์ ์ํํ ์ ์๋๋ก ํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์๋ค.
DNS(Domain Name System)์ ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด,,
์ฐ๋ฆฌ๊ฐ ์ธํฐ๋ท ์ฃผ์์ฐฝ์ "www.naver.com"์ ์ ๋ ฅ์ ํ๋ฉด "www.naver.com"์ด๋ผ๋ ์ด๋ฆ์
์ค์ ๊ฐ์ผ ํ๋ ๋คํธ์ํฌ ์ฃผ์(ex.111.111.111.111)๋ก ๋ฐ๊ฟ์ฃผ๊ฑฐ๋ ๋ฐ๋๋ก ๋ฐ๊ฟ์ฃผ๋ ์์คํ ์ด๋ค
naver.com๊ณผ gmail.com๋ ์๋๋ ์๊ธฐ ์์ ์ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ๊ฐ๊ณ ์๋๋ฐ,
์์ ๋ค์ ์ด๋ฆ์ DNS ์๋ฒ์ ๋ฑ๋ก๋ง ํด์ค ๊ฑฐ๋ค
SMTP๋ฅผ ์ฌ์ฉํด์ ์ด๋ฉ์ผ์ ์ ์กํ ๋๋, DNS๋ฅผ ๊ฑฐ์น๊ฒ ๋๋๋ฐ
๋ณด๋ด๋ ์ฌ๋์ด SMTP ์๋ฒ๋ก ์ ๊ทผ์ ํ๊ฒ ๋๋ฉด, SMTP ์๋ฒ๋ DNS๋ฅผ ํตํด ๋ฐ๋ ์ฌ๋์ ์ฃผ์๋ฅผ ์ ์ ์๋ค
(๊ทธ๋ฆผ์ ๊ฐ๋จํ๋ฐ ์ฌ์ค ๋ ๋ณต์กํ๋ค. ์ด๋ฆ์ด ์ฌ๋ฌ ๊ฐ์ผ ์๋ ์์ผ๋๊น)
๊ทธ๋ฅ ์ด๋ป๊ฒ ์ด๋ฆ์ ์๊ณ ์ฐ๋ ํด์ ์์๋ดค๋ค,,
4. SMTP ์ฌ์ฉ Port
๊ทธ๋์ SMTP ์๋ฒ์๋ ๊ทธ๋ผ ์ด๋ค ์ฃผ์๋ก ์ ๊ทผ์ ํด์ผํ ๊น
์์์๋ ์ ๊น ์๊ธฐํ์ง๋ง, SMTP ์๋ฒ๋ ์๊ธฐ๋ค๋ง์ ์ฃผ์๊ฐ ์ด๋ฏธ ์๋ค (smtp.xxx.com ์ด๋ฐ๊ฑฐ)
์๊ธฐ๋ง์ SMTP ์๋ฒ ๋ง๋ค๊ณ ์ถ์ผ๋ฉด ๋๋ด๊ณ ์ฌ๋ฉด ๋๋ค ์์ฃผ ๊ฐ๋จํ๋ค
๊ทธ๋ฌ๋ฉด ์ฃผ์๋ ์๊ณ , Port๋ง ์๋ฉด ๋๋๊ฑฐ๋ค
๊ฒ์ํ๋ฉด ๋ค ๋์ค๋๋ฐ ๋ด๊ฐ ๋ณผ๋ ค๊ณ ์ ์ด ๋์๊ฑฐ๋ค
๊ธฐ๋ณธ TCP ํฌํธ: 25
TLS ํฌํธ: 587
SSL ํฌํธ: 465
๋์๊ฒ ๋ค.
5. SMTP ๋ผ์ด๋ธ๋ฌ๋ฆฌ
SMTP ํด๋ผ์ด์ธํธ ์๋ฎฌ์ ๋ง๋ค์ด์ ํ ์คํธํ๋ ค๊ณ ์์๋ดค๋ค
๋๋ ์ด์ค์์ libquickmail์ ์ด์ฉํด์ ํ ์คํธํด๋ณด์๋ค ( language๋ C๋ก ํ๋ค )
1) libquickmail
- c/c++์์ ์ ์๋ฉ์ผ์ ๋ณด๋ด๊ธฐ ์ํ c ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- SMTP ํต์
- curl์ ๋ฉํํด๋ ๋ผ์ด๋ธ๋ฒ๋ฆฌ
- ๋ผ์ด์ ์ค: GNU General Public License version 3.0 (GPLv3) (https://olis.or.kr/license/Detailselect.do?lId=1072)
- ์์ ์ฝ๋: https://github.com/cdevelop/libquickmail/blob/master/test_quickmail.c
2) libcurl
- ์ฌ์ฉ๋ฒ ๊ฐํธ
- ์๋ curl์ http ์์ฒญํ ๋ ๋ง์ด ์ฌ์ฉํ๋๋ฐ, SMTP ํต์ ์์๋ ์ฐ์
- ์์ ์ฝ๋: https://github.com/curl/curl/blob/master/docs/examples/smtp-mail.c
- api ๋ชฉ๋ก: https://curl.se/libcurl/c/
- ๋ผ์ด์ ์ค: MIT/X (https://curl.se/docs/copyright.html)
๋ณดํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๋ ํ์์ ๋ณด๋๊น,
์ด๋ฉ์ผ์์ ์ฌ์ฉํ๋ To/CC/From ์ฃผ์๋ฅผ api๋ฅผ ํตํด์ ํ๋ผ๋ฏธํฐ๋ก ์ค์ ํด์ฃผ๊ณ ์๊ณ
๋ฉ์ผ์ ๋ณด๋ด๋ api๋ฅผ ๋ถ๋ฅผ ๋ smtp ์๋ฒ ์ฃผ์๋ ๋๊ฒจ์ฃผ๊ณ ์๋ค
ex) mail_send("smtp.example.com", "smtp ์ ์ port", "receiver@naver.com", "smtp ์ ์ id", "smtp ์ ์ ๋น๋ฒ" ...)
๋๋ฌด ๋น์ฐํ๋ค
libquickmail ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํด์ ํ ์คํธ๋ง ๊ฐ๋จํ๊ฒ ํ๋๋ฐ,
์ฌ์ค libquickmail์์ ์ ๊ณตํ๋ ์ํ ์ฝ๋๋ผ ์๋ฏธ๋ ์๋ค
#include "quickmail.h"
#include <stdio.h>
#define FROM "test_send@example1.com"
#define TO "test_recv@example2.com"
#define SMTPSERVER "smtp.example1.org"
#define SMTPPORT 25
#define SMTPTLSPORT 587
#define SMTPSSLPORT 465
#define SMTPUSER "user"
#define SMTPPASS "pass"
int main ()
{
printf("libquickmail %s\n", quickmail_get_version());
quickmail_initialize();
quickmail mailobj = quickmail_create(FROM, "libquickmail test e-mail");
quickmail_add_to(mailobj, TO);
quickmail_set_body(mailobj, "์๋
ํ์ธ์\nThis mail was sent using libquickmail.");
const char* errmsg;
quickmail_set_debug_log(mailobj, stderr);
#if 0
errmsg = quickmail_send(mailobj, SMTPSERVER, SMTPPORT, SMTPUSER, SMTPPASS);
#else
errmsg = quickmail_send_secure(mailobj, SMTPSERVER, SMTPSSLPORT, SMTPUSER, SMTPPASS);
#endif
if( errmsg != NULL ) {
fprintf(stderr, "Error sending e-mail: %s\n", errmsg);
}
quickmail_destroy(mailobj);
quickmail_cleanup();
return 0;
}
mailobj๋ผ๋ quickmail ๊ฐ์ฒดํ๋ ๋ง๋ค์ด์ ๊ฐ ์ ํ , ์ ํ , ๋ณด๋ด์ค๋ก ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์์๋ค
์ค์ ๋ฉ์ผ์ ๋ณด๋ด๋๊ฑด quickmail_send() ๋๋ quickmail_send_secure()๋ผ๋ ๊ฑธ ์ฌ์ฉํ๋๋ฐ,
์ฐจ์ด๋ TCP๋ก ๋ณด๋ผ๊ฑด์ง SSL/TLS๋ก ๋ณด๋ผ๊ฑด์ง์ ๋ํ ์ฐจ์ด์ผ ๋ฟ์ด๋ค
SMTPUSER์ SMTPPASS๋ SMTP ์๋ฒ๋ก ์ ๊ทผํ ๋ ์์ด๋์ ๋น๋ฒ์ด๋ค
์คํํด๋ณด๋ฉด
์๋ฐ ๋ชจ์์ด ๋์ค๋๋ฐ,
์ข์ธก์ < > ์๋ฐ ๊ธฐํธ๋ค์ ๋ด๊ฐ ๋ณด๋ธ๊ฑฐ๊ฐ > ์๊ฑฐ๋ฅผ ์ฐ๊ณ , < ์ด๊ฑฐ๋ก ์จ๊ฑฐ๋ smtp ์๋ฒ์์ ๋ฐ์ ์๋ต์ ๋ปํ๋ค
๊ทธ๋ฆฌ๊ณ 220, 250 ์๋ฐ๊ฑฐ๋ smtp ์๋ฒ๊ฐ ์ค ์๋ต ์ฝ๋์ด๋ค. 2.1.0 ์ด๋ฐ๊ฑฐ๋ ์๋ต์ฝ๋ ์ค๋ช ๋ณด๋ฉด ๋์ด
(์๋ต์ฝ๋๋ ์๋ ์ฐธ๊ณ ์ฌ์ดํธ๋ค์ ์ฌ๋ ค๋๊ฒ ๋ค)
์ค๊ฐ์ DATA ์ด๋ฐ ๋ด์ฉ์ด ๋์ค๋๋ฐ, SMTP๊ฐ ํ ์คํธ๋ฅผ ๋ณด๋ด๋๊ฑฐ์ด๋๊น,
DATA๋ฅผ ์ฐ๋ฉด ๋ฉ์์ง ํ ํธ์คํธ์ด ์ฒซ ์ ํธ๋ค๋ผ๋ ์ฝ์์ด๋ค
์๋ฐ ์์ผ๋ก ๊ฐ๋จํ๊ฒ ๋ณด๋ด๊ณ ๋ฐ์ ์ ์๋ค ใ
์์ฒญ ๊ฐ๋จํ ํ๋กํ ์ฝ์ด๋ผ ์ฌ์ค ์ ๋ฆฌํ ๊ฒ ๋ง์ด ์์๋ค
send()ํ๋ฉด ๋๋๋๊ฑฐ๋ผ;
๊น๊ฒ ํ๋ฉด ๋ฌผ๋ก ์์์ผํ ๊ฑฐ ์์ฒญ ๋ง์
์๊ฐ๋๋ฉด DNS๋ ๋ ์ฐพ์๋ด์ผ๊ฒ ๋ค (์ํ๊ฒ ๋ค๋ ๋ป)
* ์ํค๋ฐฑ๊ณผ
ko.wikipedia.org/wiki/%EB%8F%84%EB%A9%94%EC%9D%B8_%EB%84%A4%EC%9E%84_%EC%8B%9C%EC%8A%A4%ED%85%9C
* SMTP Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐธ๊ณ ์๋ฃ
* SMTP ์๋ต์ฝ๋
blog.naver.com/ncloud24/220946070335
* SMTP ๊ทธ๋ฆผ ์ฐธ๊ณ ํ๊ฑฐ
www.socketlabs.com/blog/smtp-or-imap/
'๐ Protocol' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
UDP๋ฅผ ์์๋ณด์ (0) | 2021.07.08 |
---|---|
SOAP์ ์์๋ณด์ (0) | 2021.06.10 |
HTTP Chunked Message๋ฅผ ์์๋ณด์ (0) | 2021.03.09 |