ジュリアでネイバーからメールを送る方法
概要
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: ▷eq1◁tic\r\n" *
"▷eq2◁(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