'LuaSocket'에 해당되는 글 1건

  1. 2013.04.29 [LuaSocket] lua만 이용해 메일 보내기

LuaSocket

in-house 툴에서 주어진 데이터를 확인하고 결과 내용을 메일로 전송할 일이 생겼는데, 간단한 툴이기 때문에 그냥 100% 루아로만 작성해보고 싶었다. 그래서 lua 자체로 메일 보내는 기능을 찾아봤는데, LuaSocket을 이용하면 쉽게 보낼 수 있더라. 별도로 다운받아서 빌드해 사용할 수도 있지만 Lua For Windows를 설치하면 자동으로 같이 설치된다.

사용법은 정말 별것이 없다. SMTP 소개 페이지에 있는 샘플 코드 복사해다가 실행시키면 그냥 실행됨 –_-)b 다만 메일에 한글을 쓰려고 하니 제대로 동작하지 않는다. – 그것이 이 글을 적는 이유이기도 하다 – utf-8 인코딩으로 텍스트를 보내고 싶다면 아래 코드를 참고하면 된다.

local smtp = require("socket.smtp")
local ltn12 = require("ltn12")
local mime = require("mime")

local function headerencode(src)
    return "=?UTF-8?B?" ..
        ltn12.source.chain(
            ltn12.source.string(src),
            ltn12.filter.chain(
                mime.encode("base64"),
                mime.wrap()
            )
        )() ..
        "?="
end

local mesgt = {
    headers = {
        From = headerencode('あわわわ') .. " ",
        To = headerencode('あわわわ') .. " ",
        Subject = headerencode("日本語の件名"),
        ['Content-Type'] = 'text/plain; charset="UTF-8";',
        ['Content-Transfer-Encoding'] = 'base64',
    },
    body = ltn12.source.chain(
        ltn12.source.string("日本語の本文も送信できます."),
        ltn12.filter.chain(
            mime.encode("base64"),
            mime.wrap()
        )
    )
}

assert(smtp.send{
    from = "",
    rcpt = "",
    source = smtp.message(mesgt),
    server = 'localhost'
})

코드는 여기에서 가져와서 indentation만 수정했음.

lua 자체에서 메일 보내는게 어려우면 python이나 powershell로 단계적으로 넘어가려고 했는데, 이 정도면 충분히 만족 :)

Posted by leafbird 트랙백 0 : 댓글 0

댓글을 달아 주세요