All'interno del mio programma, sto componendo un'e-mail da inviare utilizzando il software client e-mail predefinito installato sul computer dell'utente.Come può un programma Delphi inviare un'e-mail con allegati tramite il client e-mail DEFAULT?
Ho composto l'indirizzo mailto, il soggetto, il corpo multilinea e ho diversi allegati da includere.
ho quasi avuto questo lavoro utilizzando mailto e ShellExecute come segue:
Message := 'mailto:[email protected]'
+ '?subject=This is the subjectBehold Error Report'
+ '&body=This is line 1' + '%0D%0A'
+ 'This is line 2' + '%0D%0A'
+ 'This is line 3'
+ '&Attach=c:\file1.txt';
RetVal := ShellExecute(Handle, 'open', PChar(Message), nil, nil, SW_SHOWNORMAL);
if RetVal <= 32 then
MessageDlg('Cannot find program to send e-mail.', mtWarning, [mbOK], 0);
Utilizzando Delphi 2009 su una macchina Windows Vista, questo aprirà una Microsoft Mail finestra "mail Crea", con la A, Oggetto e Il corpo è stato riempito correttamente. Tuttavia il file non viene allegato.
Come ho cercato questo, ho notato alcuni commenti affermando che questa tecnica non funziona con tutti i client di posta. Tuttavia, la maggior parte dei commenti è piuttosto vecchia, poiché mi rendo conto che questa è una tecnica molto antica.
Quindi ho trovato che Zarko Gajic said che "questo approccio è ok, ma non è possibile inviare allegati in questo modo".
Ho visto anche l'API di Windows Simple Mail (MAPI), ma Zarko dice che funziona solo se l'utente finale ha un software di posta elettronica compatibile MAPI. Esistono tecniche ben documentate sull'utilizzo di MAPI con Delphi (ad esempio Sending e-mail using mapi), ma tutte hanno la dichiarazione di non responsabilità che MAPI non è sempre installato con Windows.
Inoltre, desidero davvero che il messaggio venga visualizzato per primo nel programma di posta elettronica predefinito dell'utente, in modo che lo includano come parte dei loro record di posta elettronica e possano modificarlo e decidere se e quando inviarlo. Non sono sicuro di come funziona MAPI e se lo farà.
Quindi le mie esigenze sono:
Per portare l'e-mail nel programma di posta elettronica dell'utente.
Per consentire uno o più allegati.
Per lavorare con (si spera) tutti i client di posta elettronica su qualsiasi macchina Windows da XP su (ad esempio XP, Vista o 7).
Esiste un animale simile? O forse qualcuno sa come ottenere gli allegati per lavorare con la tecnica mailto/ShellExecute?
Cosa fa la maggior parte della gente?
Edit:
ci sono state alcune risposte con soluzioni MAPI e persino una soluzione Indy.
Il problema che ho con loro è che non usano necessariamente il client di posta predefinito. Ad esempio, sul mio computer Vista ho installato Windows Mail come client predefinito. Quando eseguo l'invio MAPI, non viene visualizzato Windows Mail, ma viene richiamato e viene impostata l'email in Outlook. Non lo voglio
Due dei miei utenti del mio programma è lamentato:
Vostra routine di debug non riesce a inviare il file, come si tenta di avviare Windows Mail per qualche motivo conosciuto per è di per sé piuttosto che utilizzare il client di posta predefinito (nel mio caso Thunderbird)
ho cercato di riempire il rapporto eccezione ma ha rinunciato quando ha chiesto per questo server, il server! Ho quindi ottenuto davvero infastidito perché ha lanciato Outlook - Non lo uso mai, mai, né voglio usarlo.
Non ho bisogno del codice per MAPI o Indy. Sono facilmente disponibili. Ma se suggerisci MAPI o Indy, quello di cui ho veramente bisogno è un modo per trovare il client predefinito e assicurarti che sia quello che ha passato l'email da inviare.
Inoltre, ho bisogno di sapere se MAPI è ora universale. 5 anni fa, non era garantito il funzionamento su tutte le macchine perché non era installato come parte del sistema operativo. È ancora vero o MAPI ora viene fornito con Windows XP, Vista e 7 per impostazione predefinita?
Le stesse domande vanno per Indy o altre soluzioni suggerite. Può funzionare con il client predefinito e funzionerà su quasi tutte le macchine Windows XP e successive?
Il motivo per cui la soluzione "mailto" è così bella, è che tutte le macchine devono supportarlo allo scopo di gestire l'istruzione mailto HTML trovata nelle pagine Web. Ora, se solo potessi usarlo per aggiungere allegati ...
soluzione Probabile trovato: mjustin sottolineato alternativa che fa uso del comando sendto del sistema operativo. Questa è probabilmente la strada da percorrere.
Il mailto non era limitato a 256 caratteri come il mailto HTML, ma sono stato devastato nello scoprire che è stato limitato a 2048 caratteri. Fortunatamente poche ore dopo, mjustin ha dato la sua risposta.
Se l'implementazione di ciò va bene, la sua risposta lo avrà fatto per me. In caso contrario, aggiungerò i miei commenti qui.
No. Come risulta, la soluzione sendto non apre sempre il programma di posta elettronica predefinito. Sulla mia macchina, apre Outlook quando il mio mailer predefinito è Windows Mail. Peccato. Ho dovuto tornare al metodo mailto, nonostante il limite di 2048 caratteri.
Ho, tuttavia, trovo in questo articolo: SendTo mail recipient che:
A questo punto, è possibile sostituire :: ShellExecute con un ben pensato :: WinExec chiamata, utilizzando l'attuale mailto comando riga dichiarata nel registro e destinazione del client e-mail corrente (ad esempio, "% Programmi% \ Outlook Express \ msimn.exe"/mailurl:% 1). Ma quindi la limitazione è 32 KB. Come conclusione , non è possibile inviare e-mail superiori a 32 KB utilizzando il protocollo mailto .
ma poi dovrei determinare chi è il client di posta in ogni caso. Mi aspetto che porterebbe a ulteriori complicazioni.
L'altra cosa che ho scoperto è che mailto consente l'impostazione di "a", "cc", "bcc", "soggetto" e "corpo" ma senza allegati. Considerando che sendto consente SOLO gli allegati e quindi imposta un'e-mail predefinita con un messaggio predefinito e nessun modo per impostare i vari campi e il corpo.
È * non * bisogno di codice MAPI perché questo è il modo per inviare e-mail arbitraria utilizzando il client predefinito. Se il client predefinito non supporta MAPI, allora sei fuori fortuna Indy non può inviare posta usando nessun altro client, Indy * è * il client di posta elettronica in quel caso.Se MAPI non sta trovando il programma giusto, allora * è * il problema che dovresti investigare ulteriormente –
Rob: Se MAPI sono stati incorporati nel sistema operativo, quindi mi sentirò meglio a questo proposito: con XP, le persone dovevano installare Outlook (ad es. Microsoft Office) prima di ottenerlo. Hai ragione, questo è un problema. t ho tutto funzionante bene con mailto/ShellExecute tranne che non supporta gli allegati ... ma tutto questo pensiero mi sta portando a un'idea :-) Pubblicherò un'altra domanda. – lkessler
Come risulta, non devo creare un'altra domanda, poiché ce n'è già una: http://stackoverflow.com/questions/198488/drag-drop-inside-an-application-and-to-another- applicazione Il mio programma potrebbe funzionare altrettanto bene presentando i file da allegare e consentendo all'utente di trascinarli e rilasciarli sul proprio client di posta elettronica - non proprio chiari quanto aggiungerli direttamente, ma funzionerà. – lkessler