줄리아로 네이버에서 메일 보내는 법
개요
SMTPClient.jl
패키지로 SMTPsimple Mail Transfer Protocol를 사용해서 네이버에서 메일을 보내는 방법을 소개한다1. 필자의 경우 긴 시간이 걸리는 시뮬레이션이 끝나면 카카오 메일로 보고서를 보내도록 해서 연구 속도를 끌어올리기 위해 사용한다.
이렇게 죠르디가 개인톡으로 알려주니까 시뮬레이션이 언제 끝나는지 직접 서버를 돌면서 확인할 필요가 없다.
코드
어떤 언어로 구현하든 가장 먼저 다음과 같이 네이버 메일에서 SMTP를 ‘사용함’으로 설정해야한다.
줄리아
using Dates
tic = now()
for t in 1:1000
println(t)
end
toc = now()
using SMTPClient
opt = SendOptions(
isSSL = true,
username = "네이버아이디",
passwd = "비밀번호")
#Provide the message body as RFC5322 within an IO
body = IOBuffer(
"Date: $now() \r\n" *
"From: you <발신자@naver.com>\r\n" *
"To: 수신자@kakao.com\r\n" *
"Subject: simulation over\r\n" *
"\r\n" *
"$tic\r\n" *
"$toc\r\n" *
"$(Dates.canonicalize(toc - tic))" *
"\r\n")
url = "smtps://smtp.naver.com:465"
rcpt = ["<수신자@kakao.com>"]
from = "<발신자@naver.com>"
resp = send(url, rcpt, from, body, opt)
위 예시에서 가장 중요한 부분은 url = "smtps://smtp.naver.com:465"
이다. 꼭 네이버가 아니라도 어디 서버를 쓰든 여기를 그에 맞게 잘바꿔줘야한다. 송신 일시의 경우 Dates
모듈의 now()
를 사용해서 메일을 보내는 시점으로 픽스했는데, 이게 실제 시계랑 안 맞으면 한 10분 있다가 발송되는 문제를 경험했다.
파이썬
다음은 줄리아로 시도하기 전에 먼저 파이썬으로 시도했던 코드다. 이상하게도 SSL을 쓰고 포트를 456로 했는데도 잘 안돼서 SSL을 끄고 587로 했더니 됐다. 참고한 블로그2에서는 구글을 기준으로 설명했었으나, 다음의 코드는 네이버를 기준으로 잘 작동하는 것을 확인했다.
import smtplib
from email.mime.text import MIMEText
sendEmail = "발신자@naver.com"
recvEmail = "수신자@kakao.com"
password = "비밀번호"
smtpName = "smtp.naver.com" #smtp 서버 주소
smtpPort = 587 #smtp 포트 번호
text = "매일 내용"
msg = MIMEText(text) #MIMEText(text , _charset = "utf8")
msg['Subject'] = "시뮬레이션 종료"
msg['From'] = sendEmail
msg['To'] = recvEmail
print(msg.as_string())
s=smtplib.SMTP( smtpName , smtpPort ) #메일 서버 연결
s.starttls() #TLS 보안 처리
s.login( sendEmail , password ) #로그인
s.sendmail( sendEmail, recvEmail, msg.as_string() ) #메일 전송, 문자열로 변환하여 보냅니다.
s.close() #smtp 서버 연결을 종료합니다.
환경
- OS: Windows
- julia: v1.7.0