#!/bin/bash

auSecours()
{
	nom=`basename "$0"`
	cat >&2 << TERMINE
# $nom
# Réémission de message
# © 2006 Guillaume Outters

Utilisation: $nom [-][<nom> <adrél>]*
  <nom>                         nom de la personne.
  <adrél>                       adresse du destinataire.
  -                             les adresses après le - apparaîtront dans le
                                To:, mais ne recevront pas le mél.
Le message doit être fourni sur l'entrée standard.
TERMINE
	exit 1
}

declare -a personnes adresses
analyserParametres()
{
	stop=0
	serveur=smtp.free.fr
	port=25
	auth=true
	monfrom=guillaume.outters@free.fr
	mamachine=82.240.30.31
	
	serveur=smtp.free.fr
	port=587
	auth=loginfree
	monfrom=guillaume.outters@free.fr
	mamachine=89.88.76.4
	
	serveur=mail.gclo.fr
	port=25
	auth=plaingclo
	mamachine=mail.gclo.fr
	
	while [ $# -gt 0 ] ; do
		case "$1" in
			-h|--help) auSecours ;;
			-) stop=1 ;;
			-s) shift ; [[ "$1" = *:* ]] && port="${1##*:}" ; serveur="${1%%:*}" ;;
			*)
				if [ "${#personnes[@]}" -eq "${#adresses[@]}" ]
				then
					personnes[${#personnes[@]}]="$1"
				else
					adresses[${#adresses[@]}]="$1"
					[ $stop = 0 ] && destinataires[${#destinataires[@]}]="$1"
				fi
				;;
		esac
		shift
	done
}

analyserParametres "$@"

loginfree()
{
	echo AUTH LOGIN ; sleep 1 ; echo Z3VpbGxhdW1lLm91dHRlcnM= ; sleep 1 ; echo cG9pcmVhdQ== ; sleep 1
}

plaingclo()
{
	echo AUTH PLAIN xxxxxxxxxx== ; sleep 1
}

[ "${#destinataires[@]}" -lt 1 ] && auSecours

n=${#adresses[@]}
while [ $((--n)) -ge 0 ]
do
personnes[$n]="`
python << TERMINE
# -*- coding: utf-8 -*-
import locale
from email.Header import Header
print Header('${personnes[n]//\'/\'}'.decode(locale.getdefaultlocale()[1]), 'iso-8859-1').encode()
TERMINE
`"
done

( sleep 1 ; echo EHLO $mamachine ; sleep 1 ; $auth ; echo "MAIL FROM: $monfrom" ; sleep 1 ; for adresse in ${destinataires[@]} ; do echo "RCPT TO: $adresse" ; sleep 1 ; done ; echo DATA ; sleep 1 ; read taille ; dd bs=$taille count=1 | awk '{if(corps){print;next}}/^$/{corps=1}/^  /{if(!vire)print;next}{vire=0}/^Delivered-To: /{vire=1}/^To: /{print "To: '"`n=${#adresses[@]} ; while [ $((--n)) -ge 0 ] ; do echo -n "${personnes[$n]} <${adresses[$n]}>,\\n  " ; done`"'"substr($0,5);next}{if(!vire)print}' ; sleep 1 ; echo . ; sleep 1 ; echo QUIT ; sleep 1 ) | nc $serveur $port
