#!/bin/bash

# Server related configuration
MAILHOST="mail.mailhost.com"
MAILHOST="mail.invertedlogic.com"
MAILPORT=465

# User configuration
ADDRESS="$USERNAME@$MAILHOST"
ADDRESS="jryland@invertedlogic.com"
FULL_NAME=`cat /etc/passwd | grep $USERNAME | cut -d ":" -f5 | cut -d "," -f1`
FROM="\"$FULL_NAME\" <$ADDRESS>"

# Message
TO="<other@other.com>"
TO="<jryland@xiaofrog.com>"
SUBJECT="See attached file(s)"
DATE=`date -R`
#ATTACHMENT_FILES=`echo "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | sort`
ATTACHMENT_FILES="blah.txt blah2.txt"
MESSAGE_BODY="
Please find the attached file(s).

--
Kind regards
$FULL_NAME

"
BOUNDRY=ARandomStringThatOnlyThisProgramWouldEverUse
CLIENT_NAME=SpecialPurposeMailer

function glob_message_body()
{
cat << EOF
From: $FROM
To: $TO
Cc:
Subject: $SUBJECT
Date: $DATE
X-Mailer: $CLIENT_NAME
Content-Type: multipart/mixed; boundary="$BOUNDRY"
MIME-Version: 1.0

--$BOUNDRY
Content-Transfer-Encoding: quoted-printable
Content-type: text/plain

$MESSAGE_BODY

EOF

for FILE in ${ATTACHMENT_FILES}
do
  if [ -f "$FILE" ]; then
        BASE=`basename $FILE`
        EXT=${FILE##*.}
        MIME=`egrep "(  | )$EXT( |$)" /etc/mime.types | cut -d '	' -f 1`  #  cut -d '<TAB>' -f 1
        [ "$MIME" == "" ] && MIME="application/octet-stream"
        cat << EOF

--$BOUNDRY
Content-Type: $MIME; name="$BASE"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="$BASE"

EOF
        base64 "$FILE"
  fi
done

cat << EOF

--$BOUNDRY--

Some extra hidden text here :)

EOF
}

MESSAGE_BODY=`glob_message_body | sed "s/$/\\\\\r\\\\\n/g" | tr -d '\n'`

PASSWORD_STR=`python << EOF
import pygtk
pygtk.require('2.0')
import gtk

dialog = gtk.Dialog("Password", None, gtk.DIALOG_MODAL,
                     (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
label = gtk.Label()
label.set_text("\n  Please Enter your password:  \n")
dialog.vbox.add(label)
label.show()
lineedit = gtk.Entry()
lineedit.set_visibility(False)
lineedit.show() 
dialog.vbox.add(lineedit)
dialog.show()
if ( dialog.run() == gtk.RESPONSE_ACCEPT ):
  print lineedit.get_text()
  lineedit.set_text("blahblahblahblahblah") # Erase
  exit(-1)
else:
  print "Error"
  lineedit.set_text("blahblahblahblahblah") # Erase
  exit(0)
EOF`

if [ "$?" -eq "0" ]
then
  echo "User cancelled action"
  exit
fi


USERNAME_BASE64="`echo $ADDRESS | base64`"
PASSWORD_BASE64="`echo $PASSWORD_STR | base64`"
PASSWORD_STR="blahblahblahblahblah"  # Erase


python << EOF
import socket, ssl, os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#input = os.fdopen(5,"r")
sock = ssl.wrap_socket(s)
sock.connect(("$MAILHOST", $MAILPORT))
sock.settimeout(0.2)
try:
  print "R: ", sock.read()
except socket.error:
  None
sock.write("EHLO $MAILHOST\r\n")
try:
  print "R: ", sock.read()
except socket.error:
  None
sock.write("AUTH LOGIN\r\n")
try:
  print "R: ", sock.read()
except socket.error:
  None
sock.write("$USERNAME_BASE64\r\n$PASSWORD_BASE64\r\n"+
  "MAIL FROM:$ADDRESS\r\nRCPT TO:$TO\r\nDATA\r\n"+'$MESSAGE_BODY'+"\r\n")
sock.write(".\r\n")
sock.write("QUIT\r\n")
sock.write("\r\n")
try:
  print "R: ", sock.read()
except socket.error:
  None
sock.close()
exit(-1)
EOF


MESSAGE_BODY=""
PASSWORD_BASE64="blahblahblahblahblah" # Erase


