version 0.1
Requires Mac OS X 10.3 or higher

HAMSoft Engineering allows free use of this code and/or software in its "as is" condition. HAMSoft Engineering disclaims any liability of any kind for any damages whatsoever resulting from the use of this code and/or software. If you find it useful please consider making a donation to help HAMSoft Engineering stay in business.

download the python text file

NOTE: After downloading, make the text file executable using "chmod a+x"

This is a command line script, written in python, for sending a text email. It can use smtp authentication if needed. I wrote this by following an example found here. I basically just upgraded that script by adding the smtp authentication portion. The script needs 8 parameters passed to it as defined at the top of the script.

Usage: "sender" "receiver" "subject" "bodyText" "smptHost" "username" "password" "port"

Python Code:

#!/usr/bin/env python

# send a text email from the command line using python


# created 6/25/09 by Hank McShane

# version 1.0


# The code at the following URL was modified to create this script:



# NOTE: if smtp username is "" then code will not use the smtp authentication method


# input parameters

# sys.argv[1] is the sender email address

# sys.argv[2] is the reciever email address,

# this can be a comma separated string for multiple recievers

# sys.argv[3] is the subject text

# sys.argv[4] is the body text

# sys.argv[5] is the smtp host

# sys.argv[6] is the smtp username

# sys.argv[7] is the smtp password

# sys.argv[8] is the smtp port


import smtplib, email, sys, time

# check to make sure the number of arguments is correct

if len(sys.argv) != 9:

  print 'Usage: <sender> <receiver> <subject> <bodyText> <smptHost> <username> <password> <port>'


# get the argv variables

sender = sys.argv[1]

receiver = sys.argv[2]

subj = sys.argv[3]

bodyText = sys.argv[4]

smtpHost = sys.argv[5]

username = sys.argv[6] # use "" if no SMTP authentication is required

passwd = sys.argv[7] # ignored if no SMTP authentication is required

port = sys.argv[8] # ignored if no SMTP authentication is required


# create a list from the receiver in case we have a comma separated string of multiple receivers

rList = []

rList = receiver.split(',');

# setup the message header

timegmt = time.gmtime(time.time( ))

fmt = '%a, %d %b %Y %H:%M:%S GMT'

datestr = time.strftime(fmt, timegmt)

msg = 'From: %s\nTo: %s\nDate: %s\nSubject: %s\n%s' \

       % (sender, receiver, datestr, subj, bodyText)

# determine if a passworded smpt host is being used and connect as necessary

if username == "":

server = smtplib.SMTP(smtpHost) # smtp server is not password protected


server = smtplib.SMTP(smtpHost, port)

server.login(username, passwd)

failed = server.sendmail(sender, rList, msg)


# return the status

if failed:

  print ' Failed:', failed


  print ' Finished with no errors.'

Example usage of the tool with applescript:

Open this Script in your Editor

-- this uses the script to send a text email from the command line

-- setup the path to the python script

set pythonScriptPath to (path to desktop folder as text) & ""

-- setup the python script input parameters

set theSender to ""

set theReceiver to ","

set theSubject to "Python Email Test"

set theBody to "Some body text" & return & return & "complete with multiple paragraphs"

set smtpHost to ""

set smtpUserName to "smtpUserName"

set smtpPassword to "smtpPassword"

set smtpPort to "587"

-- send the email

set theResult to do shell script (quoted form of POSIX path of pythonScriptPath & space & quoted form of theSender & space & quoted form of theReceiver & space & quoted form of theSubject & space & quoted form of theBody & space & quoted form of smtpHost & space & quoted form of smtpUserName & space & quoted form of smtpPassword & space & quoted form of smtpPort)

-- display the results

tell me


display dialog theResult buttons {"OK"} default button 1 with icon note

end tell