Di seguito sono riportate le istruzioni per la creazione di un "mittente e-mail" che include un'opzione per l'invio di messaggi e-mail e allegati direttamente da un'applicazione Delphi. Prima di iniziare, considera l'alternativa ...
Supponiamo di avere un'applicazione che opera su alcuni dati del database, tra le altre attività. Gli utenti devono esportare dati dalla tua applicazione e inviare i dati tramite e-mail (come un rapporto di errore). Senza l'approccio descritto di seguito, è necessario esportare i dati in un file esterno e quindi utilizzare un client di posta elettronica per inviarli.
Invio di e-mail da Delphi
Esistono molti modi per inviare un'e-mail direttamente da Delphi, ma il modo più semplice è utilizzare il ShellExecute API. Questo invierà l'e-mail utilizzando il client di posta elettronica predefinito installato sul computer. Sebbene questo approccio sia accettabile, non è possibile inviare allegati in questo modo.
Un'altra tecnica utilizza Microsoft Outlook e OLE per inviare l'e-mail, questa volta con supporto allegati, ma è necessario utilizzare MS Outlook.
Un'altra opzione è quella di utilizzare il supporto integrato di Delphi per l'API Windows Simple Mail. Funziona solo se l'utente ha installato un programma di posta elettronica conforme MAPI.
La tecnica di cui stiamo discutendo qui utilizza Indy Componenti (Internet Direct): una fantastica suite di componenti Internet composta da protocolli Internet popolari scritti in Delphi e basati su socket bloccanti.
Il metodo TIdSMTP (Indy)
Inviare (o recuperare) messaggi e-mail con componenti Indy (forniti con Delphi 6+) è facile come rilasciare un componente o due su un modulo, impostare alcune proprietà e "fare clic su un pulsante".
Per inviare un'e-mail con allegati da Delphi utilizzando Indy, avremo bisogno di due componenti. Prima il TIdSMTOP viene utilizzato per connettersi e comunicare (inviare posta) con un server SMTP. In secondo luogo, il TIdMessage gestisce la memorizzazione e la codifica dei messaggi.
Quando il messaggio è costruito (quando TIdMessage viene "riempito" con i dati), l'e-mail viene recapitata a un server SMTP utilizzando il TIdSMTP.
Codice sorgente mittente email
Ho creato un semplice progetto di mittente della posta che spiego di seguito. Puoi scaricare il codice sorgente completo qui.
Nota: Tale collegamento è un download diretto nel file ZIP per il progetto. Dovresti essere in grado di aprirlo senza problemi, ma se non puoi, usa 7-Zip per aprire l'archivio in modo da poter estrarre i file di progetto (che sono memorizzati in una cartella chiamata Inviare una mail).
Come puoi vedere dallo screenshot in fase di progettazione, per inviare un'e-mail utilizzando il TIdSMTP componente, è necessario almeno specificare il server di posta SMTP (host). Il messaggio stesso richiede la compilazione delle normali parti e-mail, come il A partire dal, Per, Soggetto, eccetera.
Ecco il codice che gestisce l'invio di una e-mail con un allegato:
procedura TMailerForm.btnSendMailClick (Mittente: TObject); inizio StatusMemo. Chiaro; // imposta SMTP SMTP.Host: = ledHost. Testo; Porta SMTP: = 25; // imposta il messaggio di posta MailMessage. A partire dal. Indirizzo: = ledFrom. Testo; MailMessage. Destinatari. Indirizzi e-mail: = led To. Testo + ',' + ledCC.Text; MailMessage. Oggetto: = ledSubject. Testo; MailMessage. Corpo. Testo: = Corpo. Testo; Se FileExists (ledAttachment. Testo) poi TIdAttachment. Crea (MailMessage. MessageParts, ledAttachment. Testo); //inviare una mailprovareprovare SMTP.Connect (1000); SMTP.Send (MailMessage); trannesu E: Eccezione. StatusMemo. Linee. Inserisci (0, 'ERRORE:' + E. Messaggio); fine; infineSe SMTP.Connected poi SMTP.Disconnect; fine; fine; (* btnInviaMail Click *)
Nota: All'interno del codice sorgente, troverai due procedure extra che vengono utilizzate per rendere i valori di Ospite, A partire dal, e Per caselle di modifica persistenti, utilizzando un file INI per l'archiviazione.