From c33ab62210b3d195c1577c048479276056043136 Mon Sep 17 00:00:00 2001 From: Fredrik Noring <noring@nocrew.org> Date: Fri, 6 Mar 1998 14:36:19 +0100 Subject: [PATCH] The SMTP protocol is now made useful. Rev: lib/modules/Protocols.pmod/SMTP.pmod:1.2 --- lib/modules/Protocols.pmod/SMTP.pmod | 68 ++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 5 deletions(-) diff --git a/lib/modules/Protocols.pmod/SMTP.pmod b/lib/modules/Protocols.pmod/SMTP.pmod index 49ed2437b2..b65d3bb4dd 100644 --- a/lib/modules/Protocols.pmod/SMTP.pmod +++ b/lib/modules/Protocols.pmod/SMTP.pmod @@ -8,6 +8,48 @@ class client { inherit protocol; + constant reply_codes = + ([ 211:"System status, or system help reply", + 214:"Help message", + 220:"<host> Service ready", + 221:"<host> Service closing transmission channel", + 250:"Requested mail action okay, completed", + 251:"User not local; will forward to <forward-path>", + 354:"Start mail input; end with <CRLF>.<CRLF>", + 421:"<host> Service not available, closing transmission channel " + "[This may be a reply to any command if the service knows it " + "must shut down]", + 450:"Requested mail action not taken: mailbox unavailable " + "[E.g., mailbox busy]", + 451:"Requested action aborted: local error in processing", + 452:"Requested action not taken: insufficient system storage", + 500:"Syntax error, command unrecognized " + "[This may include errors such as command line too long]", + 501:"Syntax error in parameters or arguments", + 502:"Command not implemented", + 503:"Bad sequence of commands", + 504:"Command parameter not implemented", + 550:"Requested action not taken: mailbox unavailable " + "[E.g., mailbox not found, no access]", + 551:"User not local; please try <forward-path>", + 552:"Requested mail action aborted: exceeded storage allocation", + 553:"Requested action not taken: mailbox name not allowed " + "[E.g., mailbox syntax incorrect]", + 554:"Transaction failed" ]); + + static private int cmd(string c, string|void comment) + { + int r = command(c); + switch(r) { + case 200..399: + break; + default: + throw(({"SMTP: "+c+"\n"+(comment?"SMTP: "+comment+"\n":"")+ + "SMTP: "+reply_codes[r]+"\n", backtrace()})); + } + return r; + } + void create(void|string server) { if(!server) @@ -25,13 +67,29 @@ class client if(readreturncode()/100 != 2) throw(({"Connection refused by SMTP server.\n",backtrace()})); - if(command("EHLO "+gethostname())/100 !=2) - if(command("HELO "+gethostname())/100 != 2) - throw(({"SMTP: greeting failed.\n",backtrace()})); + if(catch(cmd("EHLO "+gethostname()))) + cmd("HELO "+gethostname(), "greeting failed."); + } + + void send_message(string from, string *to, string body) + { + cmd("MAIL FROM:"+from); + foreach(to, string t) + cmd("RCPT TO:"+t); + cmd("DATA"); + cmd(body+"\r\n."); + cmd("QUIT"); } - void send_message(string *to, string body) + void simple_mail(string to, string subject, string from, string msg) { - // Not yet done + send_message(from, ({ to }), + (string)MIME.Message(0, (["mime-version":"1.0", + "subject":subject, + "from":from, + "to":to]), + ({ MIME.Message(msg, + (["content-type":"text/plain;charset=iso-8859-1", + "content-transfer-encoding":"8bit"])) }))); } } -- GitLab