новости сообщество форум вики полезно

Отсылаем письма через GMail

11/12/2009 10:59

How to send email via Gmail using Erlang

Так как протокол SMTP достаточно прост, а модуль SSL, поставляемый с Эрлангом, поддерживает TLS, то все элементарно:

-module(smtp).
-export([connect/0]).

connect() ->
    {ok, Socket} = ssl:connect("smtp.gmail.com", 465, [{active, false}], 1000),
    recv(Socket),
    send(Socket, "HELO localhost"),
    send(Socket, "AUTH LOGIN"),
    send(Socket, binary_to_list(base64:encode("___@gmail.com"))),
    send(Socket, binary_to_list(base64:encode("johngalt"))),
    send(Socket, "MAIL FROM: <___@gmail.com>"),
    send(Socket, "RCPT TO:<___@gmail.com>"),
    send(Socket, "DATA"),
    send_no_receive(Socket, "From: <___@gmail.com>"),
    send_no_receive(Socket, "To: <___@gmail.com>"),
    send_no_receive(Socket, "Date: Tue, 15 Jan 2008 16:02:43 +0000"),
    send_no_receive(Socket, "Subject: Test message"),
    send_no_receive(Socket, ""),
    send_no_receive(Socket, "This is a test"),
    send_no_receive(Socket, ""),
    send(Socket, "."),
    send(Socket, "QUIT"),
    ssl:close(Socket).

send_no_receive(Socket, Data) ->
    ssl:send(Socket, Data ++ "\r\n").


send(Socket, Data) ->
    ssl:send(Socket, Data ++ "\r\n"),
    recv(Socket).

recv(Socket) ->
    case ssl:recv(Socket, 0, 1000) of
 {ok, Return} -> io:format("~p~n", [Return]);
 {error, Reason} -> io:format("ERROR: ~p~n", [Reason])
    end.

Вот как это работает:

3> application:start(ssl).
ok
4> smtp:connect().
"220 mx.google.com ESMTP y37sm613282mug.19\r\n"
"250 mx.google.com at your service\r\n"
"334 VXNlcm5hbWU6\r\n"
"334 UGFzc3dvcmQ6\r\n"
"235 2.7.0 Accepted\r\n"
"250 2.1.0 OK y37sm613282mug.19\r\n"
"250 2.1.5 OK y37sm613282mug.19\r\n"
"354  Go ahead y37sm613282mug.19\r\n"
"250 2.0.0 OK 1242683885 y37sm613282mug.19\r\n"
"221 2.0.0 closing connection y37sm613282mug.19\r\n"
ok

 
 
 
 

так же

См. также

Сюда ссылаются

сообщество

http://groups.google.com/group/erlang-russian/feed/rss_v2_0_msgs.xml