Mailx: mailrc con direttiva "set sendmail="... esotica!
Inviato: gio 13 ago 2015, 14:40
Come ho descritto in questo topic sto cercando di mettere in piedi una configurazione diciamo "unix-style" per l'email sfruttando software come esmtp, fetchmail, procmail (o alternative simili).
Per la ricezione ho già sistemato qualcosa di funzionante, mentre per quanto riguarda l'invio della posta ho faticato un po' di più a trovare informaioni per ottenere il comportamento desiderato.
L'idea è piuttosto semplice alla fine:
Premetto che ho in parte capito dove sta il problema ma non so come risolverlo di preciso...
Vediamo cosa funziona, ho fatto qualche test:
1- Invio di un messaggio email richiamando procmail da riga di comando. Il messaggio è scritto su un file di testo chiamato con molta fantasia "messaggio" e contiene gli headers "From:", "To:", "Subject:". Ecco il comando di invio:Formail aggiunge la data al messaggio e richiama procmail. I flag -t e -m sono flag di procmail e in particolare "-m" significa: utilizza il file di configurazione specificato invece del default ~/.procmailrc.
Come vedete al posto di richiamare /usr/bin/sendmail viene richiamato /usr/bin/procmail il quale legge le regole di invio in ~/.procmailoutrc tra le quali ovviamente viene anche richiamato /usr/bin/sendmail che si occuperà dell'invio vero e proprio. Non volevo allegarlo per non fare confusione ma per chiarezza metto anche almeno la regola in procmailoutrc:
Di fatto la regola impone a procmail di copiare il messaggio in uscita avente come From il mioindirizzo@gmail.com nella mailbox chiamata "mioindirizzo@gmail.com" e quindi inviare il messaggio con "sendmail -t". Il flag -t fa si che il nostro sendmail (esmtp) legga il destinatario (To:, Cc:, Bcc:) dal messaggio in input, che quindi deve contenerli.
In conclusione: questa semplice configurazione funziona utilizzando il comando soprariportato: il messaggio parte e viene anche copiato nella mbox mioindirizzo@gmail.com.
2- Invio da Mutt.
Anche in questo caso pare fuznionare alla grande. Ho specificato in .muttrc la direttiva:Quindi all'invio mutt richiama procmail e la sua configurazione vista sopra... Tutto funziona come mi aspettavo.
3- Invio da Mailx. Questo è proprio quello che volevo chiedere in questo topic nonostante il prologo lunghissimo.
Anche qui ho configurato il ~/.mailrc in modo analogo:
Così non funziona e restituisce un errore:
Non capisco quel flag "-i" che sembra essere passato a procmail...
Ho provato ad aggiungere la direttiva "debug" nel .mailrc ed ecco cosa restituisce questa volta:
Anche in questo caso compare dal nulla il flag "-i" passato al nostro sendmail, non capisco perchè viene aggiunto automaticamente...
Aggiungendo le virgolette e togliendo il debug:
Ottengo un altro errore:
Alla fine sempre er capirci qualcosa, ho provato a fare un piccolo script:
E l'ho impostato come comando sendmail in mailrc (togliendo sempre l'opzione debug):
In questo caso l'invio del messaggio funziona come mi aspettavo, con tanto di copia della mail inviata nella mbox stabilita in ~/.procmailoutrc.
Quello che volevo chiedere in questo post (che si è dilungato anche troppo... spero che la cosa non crei confusione invece di chiarire la sistuazione) è:
).
Grazie mille in anticipo!
Per la ricezione ho già sistemato qualcosa di funzionante, mentre per quanto riguarda l'invio della posta ho faticato un po' di più a trovare informaioni per ottenere il comportamento desiderato.
L'idea è piuttosto semplice alla fine:
- ricevo tutto con fetchmail e passso il malloppo a procmail che smista la posta nelle mailbox stabilite. Fin qui niente di inconsueto e tutto stradocumentato...
- invio tutto impostando come "sendmail" lo stesso procmail che legge un file di configurazione ~/.procmailoutrc e smista la posta in uscita prima di inviarla. Per l'invio richiamo sendmail/esmtp attraverso una regola impostata proprio in "~/. procmailoutrc".
Premetto che ho in parte capito dove sta il problema ma non so come risolverlo di preciso...
Vediamo cosa funziona, ho fatto qualche test:
1- Invio di un messaggio email richiamando procmail da riga di comando. Il messaggio è scritto su un file di testo chiamato con molta fantasia "messaggio" e contiene gli headers "From:", "To:", "Subject:". Ecco il comando di invio:
Codice: Seleziona tutto
cat messaggio|formail -a "Date: `date -R`" -s /usr/bin/procmail -t -m /home/joe/.procmailoutrcCome vedete al posto di richiamare /usr/bin/sendmail viene richiamato /usr/bin/procmail il quale legge le regole di invio in ~/.procmailoutrc tra le quali ovviamente viene anche richiamato /usr/bin/sendmail che si occuperà dell'invio vero e proprio. Non volevo allegarlo per non fare confusione ma per chiarezza metto anche almeno la regola in procmailoutrc:
Codice: Seleziona tutto
~/.procmailoutrc
Codice: Seleziona tutto
:0:
* ^From.*mioindirizzo@gmail.com
{
:0 c
mioindirizzo@gmail.com
:0
| sendmail -t
}
:0:
*
$DEFAULT
In conclusione: questa semplice configurazione funziona utilizzando il comando soprariportato: il messaggio parte e viene anche copiato nella mbox mioindirizzo@gmail.com.
2- Invio da Mutt.
Anche in questo caso pare fuznionare alla grande. Ho specificato in .muttrc la direttiva:
Codice: Seleziona tutto
set sendmail="/usr/bin/procmail -m /home/joe/.procmailoutrc"
3- Invio da Mailx. Questo è proprio quello che volevo chiedere in questo topic nonostante il prologo lunghissimo.
Anche qui ho configurato il ~/.mailrc in modo analogo:
Codice: Seleziona tutto
set sendmail=/usr/bin/procmail -m /home/joe/.procmailoutrc
Codice: Seleziona tutto
$ echo "Questa prova usa mailx esmtp e procmail in uscita"|mailx -v -r mioindirizzo@gmail.com -s 'Prova procmail in uscita con esmtp' mioindirizzo@gmail.com
procmail: Unrecognised options: "i"
Usage: procmail [-vptoY] [-f fromwhom] [parameter=value | rcfile] ...
Or: procmail [-toY] [-f fromwhom] [-a argument] ... -d recipient ...
Or: procmail [-ptY] [-f fromwhom] -m [parameter=value] ... rcfile [arg] ...
Or: procmail [-toY] [-a argument] ... -z
Processing continued
procmail v3.22 2001/09/10
Copyright (c) 1990-2001, Stephen R. van den Berg <srb@cuci.nl>
Copyright (c) 1997-2001, Philip A. Guenther <guenther@sendmail.com>
Submit questions/answers to the procmail-related mailinglist by sending to:
<procmail-users@procmail.org>
And of course, subscription and information requests for this list to:
<procmail-users-request@procmail.org>
Locking strategies: dotlocking, fcntl()
Default rcfile: $HOME/.procmailrc
It may be writable by your primary group
Your system mailbox: /var/mail/joe
Ho provato ad aggiungere la direttiva "debug" nel .mailrc ed ecco cosa restituisce questa volta:
Codice: Seleziona tutto
$ echo "Questa prova usa mailx esmtp e procmail in uscita"|mailx -v -r mioindirizzo@gmail.com -s 'Prova procmail in uscita con esmtp' mioindirizzo@gmail.com
Sendmail arguments: "send-mail" "-i" "-v" "-r" "mioindirizzo@gmail.com" "mioindirizzo@gmail.com"
Aggiungendo le virgolette e togliendo il debug:
Codice: Seleziona tutto
set sendmail="/usr/bin/procmail -m /home/joe/.procmailoutrc"
Codice: Seleziona tutto
$ echo "Questa prova usa mailx esmtp e procmail in uscita"|mailx -v -r mioindirizzo@gmail.com -s 'Prova procmail in uscita con esmtp' mioindirizzo@gmail.com
/usr/bin/procmail -m /home/joe/.procmailoutrc: File o directory non esistente
"/home/joe/dead.letter" 11/411
. . . message not sent.
Codice: Seleziona tutto
$ cat mybin/procsendmail.sh
#!/bin/sh
/usr/bin/procmail -m /home/joe/.procmailoutrc
Codice: Seleziona tutto
set sendmail=/home/joe/mybin/procsendmail.sh
Codice: Seleziona tutto
$ echo "Questa prova usa mailx esmtp e procmail in uscita"|mailx -v -r mioindirizzo@gmail.com -s 'Prova procmail in uscita con esmtp' mioindirizzo@gmail.com
procmail: [4925] Thu Aug 13 13:46:18 2015
procmail: Assigning "PATH=/bin:/sbin:/usr/bin:/usr/sbin"
procmail: Assigning "SHELL=/bin/bash"
procmail: Assigning "MAILDIR=/home/joe/Mail"
procmail: Assigning "LOGFILE=/home/joe/Mail/.procmail.log"
procmail: Opening "/home/joe/Mail/.procmail.log"
- Perchè mai, mailx non riesce ad utilizzare la direttiva "set sendmail=/usr/bin/procmail -m /home/joe/.procmailoutrc" direttamente?
- E invece riesce a riciamare lo script contenente lo stesso comando?
- Per quale motivo compare dal nulla quel flag "-i" passato al comando "sendmail" (nel mio caso procmail) che io non ho impostato da nessuna parte?
- Come dovrei impostare meglio la direttiva "set sendmail=" nel ~/.mailrc senza ricorrere ad uno script esterno?
Grazie mille in anticipo!