UPDATE by daniele_dll - 29/12/2009
Ho riscritto il software, ed adesso è presente anche una versione per linux che funziona (quasi) allo stesso modo (ovvero è obbligatorio passare almeno il primo parametro, il percorso).
E' possibile scaricare il compilato per linux in formato statico, cosi da farlo funzionare +/- ovunque, oltre al compilato per windows ed il sorgente, per compilarselo a manina, qui:
http://www.daccii.it/Progetti/DACCII-Sendmail/Downloads
A quest'indirizzo (un post del thread) http://forum.html.it/forum/showthrea...1#post12806101 ci sono ulteriori informazioni utili su come configurarlo correttamente con php
------
Spero di poter omaggiare questo tread col titolo di pillola, altimenti cancellatelo...
Mi sono imbattuto spesso in questo problema: ho EasyPHP o analogo per provare in locale un sito web, ma visto che sono sotto Windows, come provo le email? Il sendmail non esiste.
Ho cercato su questo forum e ho trovato soluzioni estremamente macchinose circa l'uso di Mercury Mail (che tuttavia essendo un server SMTP, la mail le manda davvero...).
Io cercavo qualcosa di più semplice, un programmino che preso lo standard input, generasse un file .eml visibile anche con il buon vecchio Outlook...
Ed ecco il risultato, scritto in C++:
codice:
#include <stdio.h>
#include <string.h>
bool isFileExist(char* nomefile) {
FILE *stream;
if ((stream=fopen(nomefile,"r"))!=NULL) {
return true;
} else {
return false;
}
}
void num2str(int num, char* str) {
if (num==0) strcpy(str,"0"); else strcpy(str,"");
while (num) {
switch (num % 10) {
case 0:
strcat(str,"0");
break;
case 1:
strcat(str,"1");
break;
case 2:
strcat(str,"2");
break;
case 3:
strcat(str,"3");
break;
case 4:
strcat(str,"4");
break;
case 5:
strcat(str,"5");
break;
case 6:
strcat(str,"6");
break;
case 7:
strcat(str,"7");
break;
case 8:
strcat(str,"8");
break;
case 9:
strcat(str,"9");
break;
}
num=(int) (num/10);
}
_strrev(str);
}
int main(int argc, char* argv[]) {
/* sendmail path file
Crea dei file al posto delle email.
Path è il percorso assoluto della cartella dove mettere i file. Deve esistere. Se non specificato path="C:\".
File è il nome del file in cui inviare l'output. I file vengono automaticamente numerati.
Se non specificato file="email".
p.e.
sendmail c:\mails\ mail
sendmail c:\mails\
*/
// Inizializzo le variabili
FILE *stream;
char buffer[81];
char nomefile[41];
char stringa[10];
int i=0,ch='a',j=0;
bool leggi=true;
// Inizializzo gli argomenti
switch (argc) {
case 1:
argv[1]="c:\\";
case 2:
argv[2]="email";
}
//Preparo il nomefile di output
do {
strcpy(nomefile,"");
strcat(nomefile,argv[1]);
strcat(nomefile,argv[2]);
num2str(j,stringa);
strcat(nomefile,stringa);
strcat(nomefile,".eml");
j++;
} while (isFileExist(nomefile));
//Apro il file di output
if ((stream=fopen(nomefile,"w"))!=NULL) {
while (!(((buffer[0]=='.')&&(buffer[1]=='\n'))||(ch == EOF))) {
// Prende massimo 80 byte alla volta
for(i=0;(i<79)&&((ch = getchar()) != EOF)&&(ch != '\n');i++) {
buffer[i] = (char) ch;
}
buffer[i++] = '\n'; // <= termine di riga
// Mette la riga nel file.
fwrite(buffer,sizeof(char),i,stream);
}
fclose(stream);
} else {
return 1;
}
return 0;
}
Il compilato (compreso di sorgente) lo trovate in http://www.sitissimo.it/sendmail.zip
Questo sendmail genera email progressive che possono essere comodamente lette...
L'unica modifica da effettuare nel PHP.INI è sostituire:
codice:
[mail function]
; For Win32 only.
SMTP = localhost
; For Win32 only.
sendmail_from = me@localhost.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =
o similare, con
codice:
[mail function]
sendmail_path = c:\mail\sendmail.exe c:\mail\
dove "c:\mail\" è il percorso di dove avete copiato il "sendmail.exe".
Semplice, veloce, indolore. Come piace a me!
Spero serva.