현재 Newstocks 라는 주식 레포팅 시스템을 개발하고 있다.
구현은 빠른 환경과, 다양한 라이브러리를 손쉽게 쓸 수 있는 FastAPI 환경에서 개발 중이며,
SMTP는 Naver mail을 사용해서 메일 전송 기능을 구현했다.
우선 환경 설정을 할 때 네이버 메일의 환경설정으로 이동해야 한다. (휴지통 아래에 위치)


POP/IMAP 설정으로 들어가 사용함으로 변경을 해주어야 한다.
이때 찾아본 자료와는 다르게 2단계 인증을 해주어야 한다고 되어있었는데. 여기서 2단계 인증과 애플리케이션 비밀번호 설정을 모두 해주어야 한다.
server.login(email_id, email_pw)
#아이디, 애플리케이션 pw값(네이버pwX)
나는 2단계 인증만 하고 코드에 내 네이버 비밀번호를 입력해줬더니 다음과 같은 인증 오류가 발생했었다.
SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError:
Username and Password not accepted
수정해주면 정상적으로 메일이 발송된 것을 확인할 수 있다.

전체 코드
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from jinja2 import Environment, FileSystemLoader
# Jinja2 템플릿 설정
env = Environment(
loader=FileSystemLoader('app/templates')
)
def render_html(news_list, insight):
template = env.get_template("report.html")
return template.render(
news_list=news_list,
insight=insight
)
def send_mail():
# 테스트 데이터
news_list = [
{
"title": "삼성전자 실적 상승",
"content": "영업이익 증가 예상"
},
{
"title": "미국 금리 인상 가능성",
"content": "연준 발언 영향"
}
]
insight = """
📊 시장 요약
- 반도체 시장 회복 기대
- 금리 인상 우려 지속
💡 투자 인사이트
기술주 변동성 확대 가능성 존재
"""
# HTML 렌더링
content = render_html(news_list, insight)
message = MIMEMultipart()
message['Subject'] = 'Newstocks Test'
message['From'] = 'Newstocks <본인 이메일>'
message['To'] = '전송 이메일'
mimeText = MIMEText(content, 'html')
message.attach(mimeText)
email_id = 'id값'
email_pw = '어플리케이션 pw'
server = smtplib.SMTP('smtp.naver.com', 587)
server.ehlo()
server.starttls()
server.login(email_id, email_pw)
server.sendmail(
message['From'],
message['To'],
message.as_string()
)
server.quit()
print("메일 전송 완료")
send_mail()'IT > 개발' 카테고리의 다른 글
| [뉴스톡] 개발 일지 : 한국투자증권 API 연동 (0) | 2026.05.08 |
|---|---|
| [Error] java.net.SocketException: Bad address: listen (0) | 2026.03.10 |