<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Ksmtp</id>
	<title>Ksmtp - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://aznot.com/index.php?action=history&amp;feed=atom&amp;title=Ksmtp"/>
	<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Ksmtp&amp;action=history"/>
	<updated>2026-05-08T18:42:20Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://aznot.com/index.php?title=Ksmtp&amp;diff=3278&amp;oldid=prev</id>
		<title>Kenneth: /* ksmtp */</title>
		<link rel="alternate" type="text/html" href="https://aznot.com/index.php?title=Ksmtp&amp;diff=3278&amp;oldid=prev"/>
		<updated>2016-04-26T19:21:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;ksmtp&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== ksmtp ==&lt;br /&gt;
&lt;br /&gt;
Source: https://github.com/oeey/ksmtp&lt;br /&gt;
&lt;br /&gt;
PIP: https://pypi.python.org/pypi/ksmtp&lt;br /&gt;
&lt;br /&gt;
My Python alternative to [[ssmtp]]&lt;br /&gt;
&lt;br /&gt;
== pip ==&lt;br /&gt;
&lt;br /&gt;
 pip install ksmtp&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/oeey/ksmtp&lt;br /&gt;
&lt;br /&gt;
== Revisions ==&lt;br /&gt;
&lt;br /&gt;
== v2 ==&lt;br /&gt;
&lt;br /&gt;
ksmtp.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ksmtp]&lt;br /&gt;
&lt;br /&gt;
## to address&lt;br /&gt;
to = user@domain.com&lt;br /&gt;
&lt;br /&gt;
## from&lt;br /&gt;
#from = user@domain.com&lt;br /&gt;
&lt;br /&gt;
## catch-all&lt;br /&gt;
#catch-all = user@domain.com&lt;br /&gt;
&lt;br /&gt;
## user&lt;br /&gt;
#user = username&lt;br /&gt;
&lt;br /&gt;
## pass&lt;br /&gt;
#pass = password&lt;br /&gt;
&lt;br /&gt;
## server&lt;br /&gt;
#server = smtp.gmail.com&lt;br /&gt;
&lt;br /&gt;
## port&lt;br /&gt;
#port = 465&lt;br /&gt;
#port = 587&lt;br /&gt;
&lt;br /&gt;
## secure&lt;br /&gt;
#secure = ssl&lt;br /&gt;
#secure = tls&lt;br /&gt;
&lt;br /&gt;
## subject&lt;br /&gt;
#subject = test subject&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ksmtp.py:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import smtplib&lt;br /&gt;
import email.mime.text&lt;br /&gt;
import optparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import pwd&lt;br /&gt;
import ConfigParser&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Configuration options&lt;br /&gt;
conf = {}&lt;br /&gt;
conf[&amp;quot;to&amp;quot;] = None               # user@domain.com - to address&lt;br /&gt;
conf[&amp;quot;from&amp;quot;] = None             # user@domain.com - from address&lt;br /&gt;
conf[&amp;quot;catch-all&amp;quot;] = None        # user@domain.com - send all mail to override&lt;br /&gt;
conf[&amp;quot;user&amp;quot;] = None             # username&lt;br /&gt;
conf[&amp;quot;pass&amp;quot;] = None             # password&lt;br /&gt;
conf[&amp;quot;server&amp;quot;] = &amp;#039;localhost&amp;#039;    # localhost / smtp.gmail.com&lt;br /&gt;
conf[&amp;quot;port&amp;quot;] = 25               # 25 / 587 (tls) / 465 (ssl)&lt;br /&gt;
conf[&amp;quot;secure&amp;quot;] = False          # tls / ssl&lt;br /&gt;
conf[&amp;quot;subject&amp;quot;] = &amp;#039;&amp;#039;            # &amp;#039;&amp;#039; - default subject&lt;br /&gt;
conf[&amp;quot;verbose&amp;quot;] = False         # verbose output&lt;br /&gt;
&lt;br /&gt;
CONF_FILE = &amp;#039;/etc/ksmtp.conf&amp;#039;&lt;br /&gt;
CONF_SECTION = &amp;#039;ksmtp&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def print_dict(conf):&lt;br /&gt;
    for key in conf:&lt;br /&gt;
        print key, &amp;#039;=&amp;#039;, conf[key]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def parse_config(conf):&lt;br /&gt;
    if os.path.exists(CONF_FILE):&lt;br /&gt;
        parser = ConfigParser.ConfigParser()&lt;br /&gt;
        parser.read(CONF_FILE)&lt;br /&gt;
        if parser.has_section(CONF_SECTION):&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;to&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;to&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;to&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;from&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;from&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;from&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;catch-all&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;catch-all&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;catch-all&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;user&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;user&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;user&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;pass&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;pass&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;pass&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;server&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;server&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;server&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;port&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;port&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;port&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;secure&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;secure&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;secure&amp;#039;)&lt;br /&gt;
            if parser.has_option(CONF_SECTION, &amp;#039;subject&amp;#039;):&lt;br /&gt;
                conf[&amp;quot;subject&amp;quot;] = parser.get(CONF_SECTION, &amp;#039;subject&amp;#039;)&lt;br /&gt;
    return conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_username():&lt;br /&gt;
    return pwd.getpwuid( os.getuid() )[ 0 ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def parse_command_line(conf):&lt;br /&gt;
    parser = optparse.OptionParser()&lt;br /&gt;
    parser.add_option(&amp;#039;-s&amp;#039;, &amp;#039;--subject&amp;#039;, help=&amp;#039;Subject&amp;#039;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-t&amp;#039;, &amp;#039;--to&amp;#039;, help=&amp;#039;To&amp;#039;, dest=&amp;quot;send_to&amp;quot;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-f&amp;#039;, &amp;#039;--from&amp;#039;, help=&amp;#039;From&amp;#039;, dest=&amp;quot;send_from&amp;quot;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-c&amp;#039;, &amp;#039;--catch-all&amp;#039;, help=&amp;#039;Catch all address&amp;#039;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-S&amp;#039;, &amp;#039;--server&amp;#039;, help=&amp;#039;Server&amp;#039;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-P&amp;#039;, &amp;#039;--port&amp;#039;, help=&amp;#039;Port&amp;#039;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-u&amp;#039;, &amp;#039;--user&amp;#039;, help=&amp;#039;Username&amp;#039;, dest=&amp;quot;username&amp;quot;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-p&amp;#039;, &amp;#039;--pass&amp;#039;, help=&amp;#039;Password&amp;#039;, dest=&amp;quot;password&amp;quot;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-T&amp;#039;, &amp;#039;--secure&amp;#039;, help=&amp;quot;Secure ssl/tls&amp;quot;, default=None)&lt;br /&gt;
    parser.add_option(&amp;#039;-v&amp;#039;, &amp;#039;--verbose&amp;#039;, help=&amp;quot;Verbose&amp;quot;, action=&amp;quot;store_true&amp;quot;, default=False)&lt;br /&gt;
    (options, args) = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
    # to&lt;br /&gt;
    if options.send_to:&lt;br /&gt;
        conf[&amp;quot;to&amp;quot;] = options.send_to&lt;br /&gt;
    else:&lt;br /&gt;
        if len(args) == 1:&lt;br /&gt;
            conf[&amp;quot;to&amp;quot;] = args[0]&lt;br /&gt;
&lt;br /&gt;
    # from&lt;br /&gt;
    if options.send_from:&lt;br /&gt;
        conf[&amp;quot;from&amp;quot;] = options.send_from&lt;br /&gt;
    else:&lt;br /&gt;
        if not conf[&amp;quot;from&amp;quot;]:&lt;br /&gt;
            username = get_username()&lt;br /&gt;
            hostname = os.uname()[1]&lt;br /&gt;
            conf[&amp;quot;from&amp;quot;] = username + &amp;quot;@&amp;quot; + hostname&lt;br /&gt;
&lt;br /&gt;
    if options.subject:&lt;br /&gt;
        conf[&amp;quot;subject&amp;quot;] = options.subject&lt;br /&gt;
    if options.catch_all:&lt;br /&gt;
        conf[&amp;quot;catch-all&amp;quot;] = options.catch_all&lt;br /&gt;
    if options.server:&lt;br /&gt;
        conf[&amp;quot;server&amp;quot;] = options.server&lt;br /&gt;
    if options.port:&lt;br /&gt;
        conf[&amp;quot;port&amp;quot;] = options.port&lt;br /&gt;
    if options.username:&lt;br /&gt;
        conf[&amp;quot;user&amp;quot;] = options.username&lt;br /&gt;
    if options.password:&lt;br /&gt;
        conf[&amp;quot;pass&amp;quot;] = options.password&lt;br /&gt;
    if options.secure:&lt;br /&gt;
        conf[&amp;quot;secure&amp;quot;] = options.secure&lt;br /&gt;
    if options.verbose:&lt;br /&gt;
        conf[&amp;quot;verbose&amp;quot;] = options.verbose&lt;br /&gt;
&lt;br /&gt;
    return conf, parser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_conf(conf, parser):&lt;br /&gt;
    failure = None&lt;br /&gt;
&lt;br /&gt;
    # validate to&lt;br /&gt;
    if not conf[&amp;quot;to&amp;quot;]:&lt;br /&gt;
    #if not re.match(&amp;#039;[a-zA-Z0-9.-_]+@[a-zA-Z0-9.-_]+\.[a-zA-Z0-9.-_]+&amp;#039;, conf[&amp;quot;to&amp;quot;]):&lt;br /&gt;
        failure = &amp;quot;Missing or invalid &amp;#039;to&amp;#039; address&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    #if not re.match(&amp;#039;[a-zA-Z0-9.-_]+@[a-zA-Z0-9.-_]+\.[a-zA-Z0-9.-_]+&amp;#039;, conf[&amp;quot;from&amp;quot;]):&lt;br /&gt;
    #    failure = &amp;quot;Missing or invalid &amp;#039;from&amp;#039; address&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    #if conf[&amp;quot;catch-all&amp;quot;] and not re.match(&amp;#039;[a-zA-Z0-9.-_]+@[a-zA-Z0-9.-_]+\.[a-zA-Z0-9.-_]+&amp;#039;, conf[&amp;quot;catch-all&amp;quot;]):&lt;br /&gt;
    #    failure = &amp;quot;Invalid &amp;#039;catch-all&amp;#039; address&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if conf[&amp;quot;port&amp;quot;]:&lt;br /&gt;
        try:&lt;br /&gt;
            int(conf[&amp;quot;port&amp;quot;])&lt;br /&gt;
        except:&lt;br /&gt;
            failure = &amp;quot;Invalid port number&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if conf[&amp;quot;secure&amp;quot;]:&lt;br /&gt;
        conf[&amp;quot;secure&amp;quot;] = conf[&amp;quot;secure&amp;quot;].lower()&lt;br /&gt;
        if conf[&amp;quot;secure&amp;quot;] != &amp;#039;ssl&amp;#039; and conf[&amp;quot;secure&amp;quot;] != &amp;#039;tls&amp;#039;:&lt;br /&gt;
            failure = &amp;quot;Secure must be &amp;#039;ssl&amp;#039; or &amp;#039;tls&amp;#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # report on failure&lt;br /&gt;
    if failure:&lt;br /&gt;
        parser.print_help()&lt;br /&gt;
        print &amp;quot;\nError: %s!&amp;quot; % failure&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def run():&lt;br /&gt;
    global conf&lt;br /&gt;
    conf = parse_config(conf)&lt;br /&gt;
    conf, parser = parse_command_line(conf)&lt;br /&gt;
    validate_conf(conf, parser)&lt;br /&gt;
&lt;br /&gt;
    verbose = conf[&amp;quot;verbose&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
    if verbose:&lt;br /&gt;
        print &amp;quot;Configuration:&amp;quot;&lt;br /&gt;
        print_dict(conf)&lt;br /&gt;
        print &amp;quot;-&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    msg_text = &amp;quot;&amp;quot;&lt;br /&gt;
    if not sys.stdin.isatty():&lt;br /&gt;
        msg_text = sys.stdin.read()&lt;br /&gt;
        if verbose:&lt;br /&gt;
            print &amp;quot;Subject: %s&amp;quot; % conf[&amp;quot;subject&amp;quot;]&lt;br /&gt;
            print &amp;quot;Body:&amp;quot;&lt;br /&gt;
            print msg_text&lt;br /&gt;
            print &amp;quot;-&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        sys.stdout.write(&amp;quot;Subject: &amp;quot;)&lt;br /&gt;
        if not conf[&amp;quot;subject&amp;quot;]:&lt;br /&gt;
            subject = sys.stdin.readline()&lt;br /&gt;
        print &amp;quot;Body: (use &amp;#039;.&amp;#039; to end)&amp;quot;&lt;br /&gt;
        while True:&lt;br /&gt;
            line = sys.stdin.readline()&lt;br /&gt;
            if line.strip() == &amp;quot;.&amp;quot;:&lt;br /&gt;
                break&lt;br /&gt;
            msg_text += line&lt;br /&gt;
&lt;br /&gt;
    msg = email.mime.text.MIMEText(msg_text)&lt;br /&gt;
&lt;br /&gt;
    if conf[&amp;quot;subject&amp;quot;]:&lt;br /&gt;
        msg[&amp;#039;Subject&amp;#039;] = conf[&amp;quot;subject&amp;quot;]&lt;br /&gt;
    if conf[&amp;quot;from&amp;quot;]:&lt;br /&gt;
        msg[&amp;#039;From&amp;#039;] = conf[&amp;quot;from&amp;quot;]&lt;br /&gt;
    if conf[&amp;quot;to&amp;quot;]:&lt;br /&gt;
        msg[&amp;#039;To&amp;#039;] = conf[&amp;quot;to&amp;quot;]&lt;br /&gt;
        #msg[&amp;#039;To&amp;#039;] = &amp;quot;, &amp;quot;.join(to_emails)&lt;br /&gt;
&lt;br /&gt;
    if conf[&amp;quot;secure&amp;quot;] == &amp;quot;ssl&amp;quot;:&lt;br /&gt;
        if verbose:&lt;br /&gt;
            print &amp;quot;Connecting to %s:%s over SSL ...&amp;quot; % (conf[&amp;quot;server&amp;quot;], conf[&amp;quot;port&amp;quot;])&lt;br /&gt;
        s = smtplib.SMTP_SSL(conf[&amp;quot;server&amp;quot;], conf[&amp;quot;port&amp;quot;])&lt;br /&gt;
    else:&lt;br /&gt;
        if verbose:&lt;br /&gt;
            print &amp;quot;Connecting to %s:%s...&amp;quot; % (conf[&amp;quot;server&amp;quot;], conf[&amp;quot;port&amp;quot;])&lt;br /&gt;
        s = smtplib.SMTP(conf[&amp;quot;server&amp;quot;], conf[&amp;quot;port&amp;quot;])&lt;br /&gt;
        if conf[&amp;quot;secure&amp;quot;] == &amp;quot;tls&amp;quot;:&lt;br /&gt;
            s.ehlo()&lt;br /&gt;
            if verbose:&lt;br /&gt;
                print &amp;quot;Starting TLS ...&amp;quot;&lt;br /&gt;
            s.starttls()&lt;br /&gt;
            s.ehlo()&lt;br /&gt;
    if conf[&amp;quot;user&amp;quot;] and conf[&amp;quot;pass&amp;quot;]:&lt;br /&gt;
        if verbose:&lt;br /&gt;
            print &amp;quot;Logging in as %s ...&amp;quot; % conf[&amp;quot;user&amp;quot;]&lt;br /&gt;
        s.login(conf[&amp;quot;user&amp;quot;], conf[&amp;quot;pass&amp;quot;])&lt;br /&gt;
&lt;br /&gt;
    if conf[&amp;quot;catch-all&amp;quot;]:&lt;br /&gt;
        if verbose:&lt;br /&gt;
            print &amp;quot;Sending message to forced %s ...&amp;quot; % conf[&amp;quot;catch-all&amp;quot;]&lt;br /&gt;
        s.sendmail(conf[&amp;quot;from&amp;quot;], [conf[&amp;quot;catch-all&amp;quot;]], msg.as_string())&lt;br /&gt;
    else:&lt;br /&gt;
        if verbose:&lt;br /&gt;
            print &amp;quot;Sending message to %s ...&amp;quot; % conf[&amp;quot;to&amp;quot;]&lt;br /&gt;
        s.sendmail(conf[&amp;quot;from&amp;quot;], [conf[&amp;quot;to&amp;quot;]], msg.as_string())&lt;br /&gt;
    if verbose:&lt;br /&gt;
        print &amp;quot;Message Sent.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if verbose:&lt;br /&gt;
        print &amp;quot;Quitting ...&amp;quot;&lt;br /&gt;
    s.quit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    run()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== v1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
import smtplib&lt;br /&gt;
import email.mime.text&lt;br /&gt;
import optparse&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import pwd&lt;br /&gt;
&lt;br /&gt;
os.system(&amp;#039;logger mail called&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
parser = optparse.OptionParser()&lt;br /&gt;
parser.add_option(&lt;br /&gt;
    &amp;#039;-s&amp;#039;, &amp;#039;--subject&amp;#039;,&lt;br /&gt;
    help=&amp;#039;Subject&amp;#039;,&lt;br /&gt;
    default=&amp;quot;&amp;quot;)&lt;br /&gt;
parser.add_option(&lt;br /&gt;
    &amp;#039;-t&amp;#039;, &amp;#039;--to&amp;#039;,&lt;br /&gt;
    help=&amp;#039;To&amp;#039;,&lt;br /&gt;
    dest=&amp;quot;send_to&amp;quot;,&lt;br /&gt;
    default=None)&lt;br /&gt;
parser.add_option(&lt;br /&gt;
    &amp;#039;-f&amp;#039;, &amp;#039;--from&amp;#039;,&lt;br /&gt;
    help=&amp;#039;From&amp;#039;,&lt;br /&gt;
    dest=&amp;quot;send_from&amp;quot;,&lt;br /&gt;
    default=None)&lt;br /&gt;
parser.add_option(&lt;br /&gt;
    &amp;#039;-S&amp;#039;, &amp;#039;--server&amp;#039;,&lt;br /&gt;
    help=&amp;#039;server&amp;#039;,&lt;br /&gt;
    default=&amp;quot;prime&amp;quot;)&lt;br /&gt;
(options, args) = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
def get_username():&lt;br /&gt;
    return pwd.getpwuid( os.getuid() )[ 0 ]&lt;br /&gt;
&lt;br /&gt;
if options.send_to:&lt;br /&gt;
    send_to = options.send_to&lt;br /&gt;
else:&lt;br /&gt;
    if len(args) == 1:&lt;br /&gt;
        send_to = args[0]&lt;br /&gt;
    else:&lt;br /&gt;
        parser.print_help()&lt;br /&gt;
        sys.exit(1)&lt;br /&gt;
&lt;br /&gt;
if options.send_from:&lt;br /&gt;
    send_from = options.send_from&lt;br /&gt;
else:&lt;br /&gt;
    username = get_username()&lt;br /&gt;
    hostname = os.uname()[1]&lt;br /&gt;
    send_from = username + &amp;quot;@&amp;quot; + hostname&lt;br /&gt;
&lt;br /&gt;
msg_text = sys.stdin.read()&lt;br /&gt;
msg = email.mime.text.MIMEText(msg_text)&lt;br /&gt;
&lt;br /&gt;
msg[&amp;#039;Subject&amp;#039;] = options.subject&lt;br /&gt;
msg[&amp;#039;From&amp;#039;] = send_from&lt;br /&gt;
msg[&amp;#039;To&amp;#039;] = send_to&lt;br /&gt;
&lt;br /&gt;
s = smtplib.SMTP(options.server)&lt;br /&gt;
s.sendmail(send_from, [send_to], msg.as_string())&lt;br /&gt;
s.quit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kenneth</name></author>
	</entry>
</feed>