JuliaでGmailから自分宛てにメール送信

タイトルの通りで,Juliaを使いメール送信する方法を紹介します.

Gmailを使う場合のみですが,事前に,Googleアカウントから,安全性の低いアプリのアクセスを有効にしておきます.
lessecureapps.png
この設定を変更すると,Gmailに「重要なセキュリティ通知」というタイトルのメールが来るので,この設定変更に心当たりがあると入力しておきます.

続いて,メールアドレス,パスワードなどを設定ファイルとしてJSONに保存する機能を作成します.
using JSON
function initsettings()
    settings = Dict(
        "url" => "smtps://smtp.gmail.com:465",
        "from" => "You",
        "username" => "you@gmail.com",
        "passwd" => "yourgmailpassword"
    )
    json = JSON.json(settings)
    open("smtp.json", "w") do f
        print(f, json)
    end
end
function readsettings()
    str = open(f -> read(f, String), "smtp.json")
    settings = JSON.parse(str)
    return settings
end
initsettings()で設定ファイルを作成し,設定を自分のGmailアカウントに合わせて変更しておきます.

それから,メール送信をするコードを作成します.といいつつSMTPClientパッケージのサンプルコードをほぼそのまま使うだけです.
using SMTPClient, Dates
function sendmail(subject::String, message::String)
    settings = readsettings()
    opt = SendOptions(
        isSSL=true,
        username=settings["username"],
        passwd=settings["passwd"])
    # Provide the message body as RFC5322 within an IO
    dtstr = Dates.format(Dates.now(), "e, dd u YYYY HH:MM:SS +0900")
    body = IOBuffer(
        "Date: " * dtstr * "\r\n" *
        "From: " * settings["from"] * " <" * settings["username"] * ">\r\n" *
        "To: " * settings["username"] * "\r\n" *
        "Subject: " * subject * "\r\n" *
        "\r\n" *
        message * 
        "\r\n")
    url = settings["url"]
    rcpt = ["<" * settings["username"] * ">"]
    from = "<" * settings["username"] * ">"
    resp = send(url, rcpt, from, body, opt)
end

ユーザー名,パスワード,送信元,送信先などは設定ファイルから読み込んだ値を使用します.また,Datesで送信時刻を付加するようにします.それと,関数化してメールタイトルとメッセージ文字列だけ指定すれば送れるようにしておきます.

試しに送ってみましょう.
julia> sendmail("テストメール", "Juliaからのメール送信のテストです.")
Return Code: 250
Time:        3.462054
Response:   
ちょっと時間がかかりますが,無事送信できました.
sendedmail.png