# MTA (come ssmtp)

## gionnico

Ho uno spazio web, ed ho bisogno di utilizzare la funzione mail locale.

Il server smtp però è smtp.email.it dove ho un account.

Per spedire email, richiede utente e password e le email possono essere inviate soltanto da utente@email.it

Come faccio a configurare semplicemente un MTA per fare questo?

ssmtp non và bene perché non funziona ad esempio con PHP .........   :Question: 

----------

## .:chrome:.

stai confondendo le cose.

qualunque SMTP server permette di inviare le mail solo ai domini locali in piena libertà (nel tuo caso email.it).

nel caso volessi fare relay è necessario procedere all'autenticazione, e per questo dovrebbero bastarti userid e password che hai presso email.it

php funziona anche con ssmtp, ma devi dirgli di usare /usr/sbin/sendmail invece che collegarsi ad un SMTP server

----------

## mrfree

Mhhh si hai fatto un po' di confusione  :Smile: 

Comunque puoi tranquillamente utilizzare ssmtp con php, dai uno sguardo qui ad esempio

----------

## gionnico

Ok è vero..

Allora proverò ad usare ssmtp.

L'ho configurato così:

/etc/ssmtp/ssmtp.conf

```

# The person who gets all mail for userids < 1000

# Make this empty to disable rewriting.

root=gionnico@email.it

# The place where the mail goes. The actual machine name is required

# no MX records are consulted. Commonly mailhosts are named mail.domain.com

# The example will fit if you are in domain.com and your mailhub is so named.

#mailhub=mail

# Example for SMTP port number 2525

# mailhub=mail.your.domain:2525

# Example for SMTP port number 25 (Standard/RFC)

# mailhub=mail.your.domain        

# Example for SSL encrypted connection

# mailhub=mail.your.domain:465

mailhub=smtp.email.it

# Where will the mail seem to come from?

rewriteDomain=forzazzurri.mine.nu

# The full hostname

# Gentoo bug #47562

# Commenting the following line will force ssmtp to figure

# out the hostname itself.

hostname=www.forzazzurri.mine.nu

# Set this to never rewrite the "From:" line (unless not given) and to

# use that address in the "from line" of the envelope.

FromLineOverride=NO

# Use SSL/TLS to send secure messages to server.

#UseTLS=YES

# Use SSL/TLS certificate to authenticate against smtp host.

#UseTLSCert=YES

# Use this RSA certificate.

#TLSCert=/etc/ssl/certs/ssmtp.pem

AuthUser=gionnico@email.it

AuthPass=password

```

/etc/ssmtp/revaliases

```

root:gionnico@email.it:smtp.email.it

postmaster:gionnico@email.it:smtp.email.it

usenet:gionnico@email.it:smtp.email.it

webmaster:gionnico@email.it:smtp.email.it

apache:gionnico@email.it:smtp.email.it

gionnico:gionnico@email.it:smtp.email.it

```

(un bell' *:gionnico@email.it:smtp.email.it non si potrebbe usare?   :Rolling Eyes:  )

/etc/php/apache2-php5/php.ini

```

[mail function]

; For Win32 only.

;SMTP = localhost

;smtp_port = 25

; For Win32 only.

;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").

sendmail_path = /usr/sbin/sendmail

; Force the addition of the specified parameters to be passed as extra parameters

; to the sendmail binary. These parameters will always replace the value of

; the 5th parameter to mail(), even in safe mode.

;mail.force_extra_parameters =

```

Nessun output come errore php né su /var/log/messages .. e la mail non arriva.....   :Confused:   :Question: 

----------

## .:chrome:.

esattamente, dovrebbe essere corretto (salvo per il server, username e password, che ovviamente non conosco  :Wink:  )

se ssmtp dovesse darti dei problemi con l'autenticazione puoi provare anche msmtp, che delle volte si comporta un po' meglio

----------

## gionnico

Ok, ho tolto mailwrapper ed ssmtp ed ho installato msmtp... ancora non funziona.

msmtp --version

```

msmtp version 1.4.7

TLS/SSL library: OpenSSL

Authentication library: built-in

Supported authentication methods:

plain cram-md5 external login 

IDN support: enabled

NLS: enabled, LOCALEDIR is /usr/share/locale

System configuration file name: /etc/msmtprc

User configuration file name: /root/.msmtprc

```

/etc/msmtprc

```

# Set default values for all following accounts.

defaults

tls off

logfile /var/log/msmtp.log

# A freemail service

account email.it

host smtp.email.it

from gionnico@email.it

auth on

user gionnico@email.it

password password

# Set a default account

account default : email.it

```

Sul php.ini ho dovuto impostare come sendmail msmtp perché mettere

```

set sendmail="/usr/bin/msmtp"

```

Nel /etc/msmtprc non era accettato, quindi ...

/etc/php/apache2-php5/php.ini

```

[mail function]

; For Win32 only.

;SMTP = localhost

;smtp_port = 25

; For Win32 only.

;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").

sendmail_path = /usr/bin/msmtp

; Force the addition of the specified parameters to be passed as extra parameters

; to the sendmail binary. These parameters will always replace the value of

; the 5th parameter to mail(), even in safe mode.

;mail.force_extra_parameters = 

```

----------

## .:chrome:.

non mi torna una cosa: msmtp non installa /usr/sbin/sendmail? sarebbe una cosa stranissima!!!

quanto al fatto di non funzionare, verifica prima di tutto che tu possa inviare mail al dominio email.it. se questo non è possibile hai chiaramente impostato un indirizzo sbagliato per l'MX.

se riesci ad inviare mail al dominio email.it ma non ad altri domini, c'è qualcosa che non va con l'autenticazione, ed è possibile che l'MX di email subordini l'autenticazione all'uso di TLS, oppure che non permetta proprio il relay, al che devi cercarti un altro SMTP

----------

## gionnico

 *.:chrome:. wrote:*   

> non mi torna una cosa: msmtp non installa /usr/sbin/sendmail? sarebbe una cosa stranissima!!!
> 
> quanto al fatto di non funzionare, verifica prima di tutto che tu possa inviare mail al dominio email.it. se questo non è possibile hai chiaramente impostato un indirizzo sbagliato per l'MX.
> 
> se riesci ad inviare mail al dominio email.it ma non ad altri domini, c'è qualcosa che non va con l'autenticazione, ed è possibile che l'MX di email subordini l'autenticazione all'uso di TLS, oppure che non permetta proprio il relay, al che devi cercarti un altro SMTP

 

Nono, /usr/sbin/sendmail è un link simbolico a msmtp .. tutto qui? 

Io stò provando a mandare emails verso altri account email.it ma niente.

Il TLS non lo usa, usa autenticazione LOGIN, ma sono sicuro che il relay sia consentito perché ad esempio se specifico su phpBB2 di usare un server esterno, inserisco utente e password, e tralascio la funzione mail locale, le emails arrivano.

Il problema è proprio che a questo punto io vorrei usare la funzione mail locale, non vedo perché non debba funzionare e non vedo I LOG!!!??

----------

## mrfree

Anche io uso email.it come hub e con queste impostazioni funge (tutto il resto è commentato): 

```
mailhub=smtp.email.it

FromLineOverride=YES

AuthUser=xxxx

AuthPass=xxxx
```

 Quasi sicuramente il rewriteDomain non è accettato dal server smpt di email.it

Per i log il mio ssmpt logga via syslog-ng su mail.log (ho una ripartizione dei log stile hardened) a volte mi è capitato di trovare il file di log nella home dell'utente che invoca sendmail

----------

## gionnico

Uhm .. ho rimesso ssmtp   :Razz: 

mrfree, l'ho impostato come te, ma non mi arrivano le emails ^_^

Tu come hai configurato revaliases e il php.ini?

Per caso serve di forwardare qualche porta nel router (la 25)?

PS: nello "stile normale" i log vanno su /var/log/messages , ma solo se ci sono problemi noti.. qui non logga nulla ma l'email non arriva   :Evil or Very Mad: 

----------

## gionnico

Ho risolto ..

Sembra incredibile, ma il problema era nel php.ini:

Così è corretto, sendmail da solo non andava bene, era giusto il default sendmail -t -i (opzioni che peraltro NON sono supportate da ssmtp ma vengono ignorate ..   :Rolling Eyes:  )

```

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").

;sendmail_path = /usr/sbin/sendmail

```

----------

## lucapost

utilizzo sstmp per mandare qualche email da console, ma non trovo come si specifica l'oggetto. mah....

----------

## gionnico

 *lucapost wrote:*   

> utilizzo sstmp per mandare qualche email da console, ma non trovo come si specifica l'oggetto. mah....

 

Uhm penso tu debba fare tutto da te, al massimo con uno script.

Puoi inserire il Subject negli header che precedono il testo...   :Razz: 

----------

## lucapost

Grazie del consiglio, ho risolto con questo:

```
#!/bin/bash

function help () {

echo "Send a message using ssmtp by emulating the send-only behaviour of the mail command"

echo "which appeared in Version 6 AT&T UNIX. If you are not using mail in a pipe you"

echo "are expected to type in your message, followed by an \`control-D' at the beginning"

echo "of a line. The full name of the sender will be read from /etc/passwd but when \$MAIL_NAME"

echo "is set that name will be used instead."

echo

echo "Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-R reply-addr] to-addr ..."

echo "     -v    Verbose mode.  The details of delivery are displayed on the user's"

echo "           terminal."

echo "     -i    (ignored) Ignore tty interrupt signals.  This is particularly useful when"

echo "           using mail on noisy phone lines."

echo "     -I    (ignored) Forces mail to run in interactive mode even when input isn't a ter-"

echo "           minal.  In particular, the \`~' special character when sending mail"

echo "           is only active in interactive mode."

echo "     -n    (ignored) Inhibits reading /etc/mail.rc upon startup."

echo "     -s    Specify subject on command line (only the first argument after the"

echo "           -s flag is used as a subject; be careful to quote subjects contain­"

echo "           ing spaces.)"

echo "     -R    Specify reply-to adress on command line. Only the first argument"

echo "           after the -R flag is used as the address."

echo "     -c    (ignored) Send carbon copies to list of users."

echo "     -b    (ignored) Send blind carbon copies to list.  List should be a comma-separated"

echo "           list of names."

}

flags=""

subject=""

reply=""

bcc=""

cc=""

to=""

function hasNext () {

  [ -z "$1" ] && {

    help

    exit 1

  } || return 0

}

# start option processing

while test $# -gt 0 ; do

  case $1 in

    -i | -I | -n )

      # ignore

      shift ;;

    -v )

        flags="$flags -v" 

        shift ;;

    -s )

      hasNext $2 && {

        subject=$2

        shift 2

      } ;;

    -c )

      hasNext $2 && {

        cc=$2

        shift 2

      } ;;

    -b )

      hasNext $2 && {

        bcc=$2

        shift 2

      } ;;

    -R )

      hasNext $2 && {

        reply=$2

        shift 2

      } ;;

    --help | -h )

        help

        exit 0 ;;

    -* )

       echo "$0: invalid option $1" >&2

       help

       exit 1 ;;

    * )

       to="$to $1"

       shift ;;

  esac

done

function tmp-file-name () {

  local name

  seconds=$(date +%s) 

  count=0

  name=$seconds

  while [ -e /tmp/$name ] ; do 

    name=$seconds.$count

    count=$[$count + 1]

  done

  echo /tmp/$name

}

tmpfile=$(tmp-file-name)

[ ! -z "$subject" ] && echo "Subject: $subject" >> $tmpfile

[ ! -z "$to" ] && echo "To: $to" >> $tmpfile

[ ! -z "$cc" ] && echo "Cc: $cc" >> $tmpfile

[ ! -z "$bcc" ] && echo "Bcc: $bcc" >> $tmpfile

[ ! -z "$reply" ] && echo "Reply-to: $reply" >> $tmpfile

echo >> $tmpfile

[ ! -z "${MAIL_NAME}" ] && mailname="-F${MAIL_NAME}"

sed 's/\$\.\^/\$\.\^/g' >> $tmpfile

cat $tmpfile | /usr/sbin/ssmtp $flags "$mailname" $to

rm -f $tmpfile
```

quindi mi spedisco i log con qualcosa del genere: 

```
echo "mandi" |mail -v -s "prova mail" mail@dominio.it
```

grazie dell'aiuto.

----------

