| Author |
Message |
|
| Guest |
Posted: Tue Oct 14, 2008 2:55 am |
|
|
|
Guest
|
|
| Back to top |
|
| ketralnis |
Posted: Tue Oct 14, 2008 6:36 pm |
|
|
|
User
Joined: 20 Jul 2007
Posts: 151
Location: San Francisco, CA
|
> I stumbled across this today: http://www.erlang.org/user.html.
> It contains an SMTP client which seems dated but should still be
> usable here: http://www.erlang.org/contrib/smtp_client-1.1.tgz
I've had success with smtp_fsm.erl. I have an example below that is an
gen_event error-handler that emails SASL errors to a given email
address. Use it like:
---------- begin snip ----------
ok=error_logger:add_report_handler(emailing_errorhandler,
[MailServer,MailTo,MailFrom])
---------- end snip ----------
And the code:
---------- begin snip ----------
-module(emailing_errorhandler).
-behaviour(gen_event).
-export([init/1,handle_event/2,handle_call/2,
handle_info/2,terminate/2,code_change/3]).
-record(state,{smtp_server,
from_address,
to_address,
queued_messages=[],
tref}). % the handle for the timer used to flush
messages
-record(queued_message,{message,
time}).
%% gen_event callbacks
init({SmtpServer,_OldState}) ->
init(SmtpServer);
init([SmtpServer,ToAddress,FromAddress]) ->
init([SmtpServer,ToAddress,FromAddress,5*60]);
init([SmtpServer,ToAddress,FromAddress,Interval]) ->
{ok,Tref} = timer:send_interval(Interval*1000, self(),
flush_messages),
{ok,#state{smtp_server=SmtpServer,
to_address=ToAddress,
from_address=FromAddress,
tref=Tref}}.
handle_event({error, _Gleader, {_Pid, Format, Data}},
State=#state{queued_messages = Messages}) ->
Message = #queued_message{message=io_lib:format(Format,Data),
time=erlang:now()},
{ok,State#state{queued_messages=[Message | Messages]}};
handle_event({error_report, _Gleader, {_Pid, std_error, Report}},
State=#state{queued_messages = Messages}) ->
Message = #queued_message{message=Report,
time=erlang:now()},
{ok,State#state{queued_messages = [Message | Messages]}};
handle_event({error_report, _Gleader, {_Pid, Type, Report}},
State=#state{queued_messages = Messages}) ->
Message = #queued_message{message=io_lib:format("Type: ~p~nReport:
~p~n",
[Type,Report]),
time=erlang:now()},
{ok,State#state{queued_messages = [Message | Messages]}};
%% pass all other events through
handle_event(_Event, State) ->
{ok,State}.
handle_call(nocall,State) ->
{ok,_Reply=ok,State}.
handle_info(flush_messages, State=#state{queued_messages=[]}) ->
{ok,State};
handle_info(flush_messages, State=#state{queued_messages=Queued}) ->
Messages = lists:map(fun make_email/1,Queued),
Message = io_lib:format("~p messages from ~p, sent at ~p:\n\n~s",
[length(Queued),node(),
calendar:now_to_datetime(erlang:now()),
join(Messages, "\n\n---------------------\n
\n") ]),
send_email(Message,State),
{ok,State#state{queued_messages=[]}}.
terminate(_Reason,State) ->
{ok,NewState} = handle_info(flush_messages,State),
{ok,cancel} = timer:cancel(NewState#state.tref),
NewState#state{tref=undefined}.
code_change(_OldVsn,State,_Extra) ->
{ok,State}.
%% join([iolist()], iolist()) -> iolist()
join([ First | Rest ],Sep) ->
[ First | [ [Sep, X]
|| X <- Rest ]].
make_email(#queued_message{message=Message,
time=Time}) ->
io_lib:format("Error report at ~p:~n~s",
[calendar:now_to_datetime(Time),
Message]).
send_email(Msg, #state{smtp_server=SmtpServer,
to_address=ToAddress,
from_address=FromAddress}) ->
{ok,Pid} = smtp_fsm:start(SmtpServer),
{ok,_Response1}=smtp_fsm:helo(Pid),
ok=smtp_fsm:sendemail(Pid,
FromAddress,_To=ToAddress,
smtp_fsm:simp_msg(FromAddress,
ToAddress,
io_lib:format("Error report
from ~p",
[node()]),
Msg)),
ok=smtp_fsm:close(Pid),
ok.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "erlyweb" group.
To post to this group, send email to erlyweb@googlegroups.com
To unsubscribe from this group, send email to erlyweb+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/erlyweb?hl=en
-~----------~----~----~----~------~----~------~--~---
Post received from mailinglist |
|
|
| Back to top |
|
| Guest |
Posted: Wed Oct 15, 2008 11:29 am |
|
|
|
Guest
|
Cool. I'll try it out.
On Oct 14, 6:35 pm, David King <dk...@ketralnis.com> wrote:
> > I stumbled across this today:http://www.erlang.org/user.html.
> > It contains an SMTP client which seems dated but should still be
> > usable here:http://www.erlang.org/contrib/smtp_client-1.1.tgz
>
> I've had success with smtp_fsm.erl. I have an example below that is an
> gen_event error-handler that emails SASL errors to a given email
> address. Use it like:
>
> ---------- begin snip ----------
> ok=error_logger:add_report_handler(emailing_errorhandler,
> [MailServer,MailTo,MailFrom])
> ---------- end snip ----------
>
> And the code:
>
> ---------- begin snip ----------
>
> -module(emailing_errorhandler).
> -behaviour(gen_event).
>
> -export([init/1,handle_event/2,handle_call/2,
> handle_info/2,terminate/2,code_change/3]).
>
> -record(state,{smtp_server,
> from_address,
> to_address,
> queued_messages=[],
> tref}). % the handle for the timer used to flush
> messages
> -record(queued_message,{message,
> time}).
>
> %% gen_event callbacks
> init({SmtpServer,_OldState}) ->
> init(SmtpServer);
> init([SmtpServer,ToAddress,FromAddress]) ->
> init([SmtpServer,ToAddress,FromAddress,5*60]);
> init([SmtpServer,ToAddress,FromAddress,Interval]) ->
> {ok,Tref} = timer:send_interval(Interval*1000, self(),
> flush_messages),
> {ok,#state{smtp_server=SmtpServer,
> to_address=ToAddress,
> from_address=FromAddress,
> tref=Tref}}.
>
> handle_event({error, _Gleader, {_Pid, Format, Data}},
> State=#state{queued_messages = Messages}) ->
> Message = #queued_message{message=io_lib:format(Format,Data),
> time=erlang:now()},
> {ok,State#state{queued_messages=[Message | Messages]}};
> handle_event({error_report, _Gleader, {_Pid, std_error, Report}},
> State=#state{queued_messages = Messages}) ->
> Message = #queued_message{message=Report,
> time=erlang:now()},
> {ok,State#state{queued_messages = [Message | Messages]}};
> handle_event({error_report, _Gleader, {_Pid, Type, Report}},
> State=#state{queued_messages = Messages}) ->
> Message = #queued_message{message=io_lib:format("Type: ~p~nReport:
> ~p~n",
> [Type,Report]),
> time=erlang:now()},
> {ok,State#state{queued_messages = [Message | Messages]}};
>
> %% pass all other events through
> handle_event(_Event, State) ->
> {ok,State}.
>
> handle_call(nocall,State) ->
> {ok,_Reply=ok,State}.
>
> handle_info(flush_messages, State=#state{queued_messages=[]}) ->
> {ok,State};
> handle_info(flush_messages, State=#state{queued_messages=Queued}) ->
> Messages = lists:map(fun make_email/1,Queued),
> Message = io_lib:format("~p messages from ~p, sent at ~p:\n\n~s",
> [length(Queued),node(),
> calendar:now_to_datetime(erlang:now()),
> join(Messages, "\n\n---------------------\n
> \n") ]),
> send_email(Message,State),
> {ok,State#state{queued_messages=[]}}.
>
> terminate(_Reason,State) ->
> {ok,NewState} = handle_info(flush_messages,State),
> {ok,cancel} = timer:cancel(NewState#state.tref),
> NewState#state{tref=undefined}.
>
> code_change(_OldVsn,State,_Extra) ->
> {ok,State}.
>
> %% join([iolist()], iolist()) -> iolist()
> join([ First | Rest ],Sep) ->
> [ First | [ [Sep, X]
> || X <- Rest ]].
>
> make_email(#queued_message{message=Message,
> time=Time}) ->
> io_lib:format("Error report at ~p:~n~s",
> [calendar:now_to_datetime(Time),
> Message]).
>
> send_email(Msg, #state{smtp_server=SmtpServer,
> to_address=ToAddress,
> from_address=FromAddress}) ->
> {ok,Pid} = smtp_fsm:start(SmtpServer),
> {ok,_Response1}=smtp_fsm:helo(Pid),
> ok=smtp_fsm:sendemail(Pid,
> FromAddress,_To=ToAddress,
> smtp_fsm:simp_msg(FromAddress,
> ToAddress,
> io_lib:format("Error report
> from ~p",
> [node()]),
> Msg)),
> ok=smtp_fsm:close(Pid),
> ok.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "erlyweb" group.
To post to this group, send email to erlyweb@googlegroups.com
To unsubscribe from this group, send email to erlyweb+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/erlyweb?hl=en
-~----------~----~----~----~------~----~------~--~---
Post received from mailinglist |
|
|
| Back to top |
|
|
|
All times are GMT
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
|
|
|