Pagina 1 di 16 1 2 3 11 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 156
  1. #1

    [pillola] sendmail fatto in casa...

    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.
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  2. #2
    up :rollo:
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  3. #3
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Un up dopo un minuto?

    Sarebbe stato meglio se il file di output fosse stato un plain text piuttosto che un file di outlook.
    Comunque è interessante. Aggiunta alle pillole.
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

  4. #4
    Provato e va bene...

    trasferisce anche gli allegati regolarmente.

    ottimo per le prove....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Giusto per curiosità: ma andrebbe bene anche per asp? Così magari qualcuno lo posta pure lì!

  6. #6
    grazie utilissimo per i test!!!!!

  7. #7
    [OT]Che bello! E' la mia prima Pilù[/OT]

    Felice di essere stato utile.

    Rispondo un po' a tutti:
    1) Per chris : grazie di aver aggiunto la pillola. In realtà i file sono dei normalissimi ASCII!!! L'estensione EML è stata data ai file solo per la comodità di farci DOPPIO CLICK e vedere subito il risultato dell'utente... O cambi l'estensione nel sorgente e te lo ricompili o apri i file .eml col notepad :-)

    2) Per piero.mac : Si, funziona con tutto. Il sendmail (quello vero) non fa altro che inviare lo standard input. Il mio sendmail lo mette in un file. Ho dei dubbi sul fatto che ho aggiunto degli accapo oltre le 80 colonne... Credo che modificherò questo difettuccio (possono esserci problemi con le mail in formato HTML) e aggiornerò il file disponibile on-line.

    3) Per mircov : In linea di massima dovrebbe funzionare anche per ASP. Tuttavia non ne sono sicuro: ASP invoca il sendmail oppure si connette da solo alla porta 25 e fa tutto lui? Nel primo caso devi solo rintracciare "dove" nelle configurazioni c'è il path del sendmail e sostituirlo con quello del mio sendmail, altrimenti hai bisogno di installare un server mail in locale.

    Se miglioro il sendmail ve lo faccio sapere: se lo migliorate voi, fatemi sapere...
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  8. #8
    provato e funzionante, molto utile grazie

  9. #9
    Allora:

    Ho verificato che il programma funziona MOOLTO MEGLIO se non spezza le righe ogni 80 colonne...

    Ho modificato quindi la riga:
    codice:
    buffer[i++] = '\n'; // <= termine di riga
    nella riga
    codice:
    if (ch=='\n') buffer[i++] = '\n'; // <= termine di riga
    Ed infatti avevo messo un commento li' vicino, proprio perché non ero sicuro.

    Prendetevi il sendmail nuovo, poiché senza questa modifica è possibile che nella email in formato HTML qualche tag faccia questa fine:
    codice:
    </FO
    NT>
    Con conseguente spaginamento del tutto.

    Cmq, per i pigroni che non vogliono modificare e ricompilare il sorgente, ho già provveduto ad aggiornare il file sendmail.zip che contiene, come prima, sorgente e compilato.

    Buon divertimento!
    Salvatore De Bonis AKA Novice of Ricotta AKA NashCrash

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    funzionicchia
    peccato per l'accapo all'80 colonna: tronca così anche gli url

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.