Newsgroup: it.comp.lang.delphi
Titolo: JvMail e System Error 87

Invio una email utilizzando il componente JvMail e con un utente che ha 
installato windows 10 da poco viene fuori l'errore in oggetto. Tutti gli 
altri utentei windows 10, me compreso, non hanno il problema.
 
Non riesco a riprodurre il problema nel mio pc di sviluppo :( L'unica 
cosa che sono riuscito a rilevare è che il software sembra andare in 
errore alla chiamata del metodo JvMail.SendMail perché nell'email allego 
un file che creo al volo ed il file me lo trovo al posto giusto.
 
In rete ho trovato vari suggerimenti, compreso lanciare il file 
"fixmapi.exe" presente nella directory "System32" di Windows ma nulla.
 
Il software della posta: Thunderbird sembra funzionare correttamente 
compreso l'eventuale click destro su un file e selezionando la voce del 
menu contestuale "invia a destinatario posta".
 
Qualcuno si è trovato nella stessa situazione ed ha risolto?
 
Come?
 
Eventuali suggerimenti?
 
Grazie.


Ciao,
non hai detto la versione di delphi .............. e cosa vuol dire 
system error 87.
Per le piu recenti (10.4 (non sono certo) e 11) sono inclusi i 
componenti della ipworks che, secondo me, potrebbero essere i migliori 
in giro, non richiedono dll e cose strane, tutto delphi (commerciali, un 
po, tanto, costose).
Nel caso hai versioni precedenti (molto datate) ti conviene restare 
sulle indy (che ho dovuto lasciare quando ho iniziato ad usare imap 
anziche' pop3).
Controlla se la libreria si appoggia su questi due file ssleay32.dll e 
libeay32.dll, DEVONO essere della stessa versione e devono essere nella 
directory principale del programma (dove c'e' l'exe).
 
Nel caso il problema sia un altro e riesci a risolvere .... condividi la 
soluzione !!!
 
Ciao
Daniele
 
 

 
Si appoggia al server mapi di default del pc dove viene eseguita 
l'applicazione.
 
L'applicazione sta girando senza problemi su una trentina di PC tra cui 
windows 10 sia Home che Pro e windows 2008 server tranne che su un PC 
windows 10 installato da poco :(
 
Grazie.

 anziche' pop3). 
 
Perchè hai dovuto mollarli? Non capisco...
 
A.

 menu contestuale "invia a destinatario posta". 
 
Questa cosa è rilevante fino ad un certo punto.
Ovviamente (ma non per tutti...) alla fin fine tutti usano MAPI, ma passando da vie diverse.
Certo thuderbird non usa JvMail...
 
A.

Ho fatto qualche ricerca più mirata e ho trovato questo:
 
https://www.minitool.com/backup-tips/dism-error-87.html
 
 
A.

Aggiungo anche questa notizia:
 
https://www.hwupgrade.it/news/sistemi-operativi/windows-le-patch-di-ottobre-creano-problemi-di-rete-rilasciato-il-primo-fix-oob_111072.html
 
 
 
 

 Perchè hai dovuto mollarli? Non capisco....
Per quanto riguarda POP3 va tutto bene con TLS/SSL ma quando devo 
utilizzare IMAP con Indy escono (per meglio dire ... uscivano) strani 
errori sull'autenticazione. In base ai vari settaggi dei componenti 
l'errore meno serio (se cosi' si ptio' dire) era "Time Out" nella fase 
di autenticazione. Insomma per diversi e non noti problemi non si 
collegava mai al server; Server di posta yahoo. Situazione risolta con 
IP Works.
Ho segnalato questo problema nel forum di indy e, come risposta, mi 
hanno detto che sulle loro macchine non hanno problemi con yahoo, 
google, microsoft ecc... e quindi il miei errori (indicati) a loro non 
uscivano.
Usando IP Works per MAPI, piano piano ho sostituito indy.
 
Ciao
 
Daniele

 
 
Utilizzando JvMail, al momento del JvMail.SendMail viene creata la form 
che il server mapi installato nel sistema crea alla richiesta di una 
nuova email.
 
Facevo riferimento a TB per segnalare che l'eventuale richiesta di 
creazione di una nuova email funziona correttamente, anche da filesystem 
dal menu contestuale "invia a destinatario posta".
 
Grazie.

Puoi postare il codice?
 
A.

 
Certo: Viene creato un file .zip della fattura elettronica da allegare 
all'email, poi viene creata l'email e spedita:
 
procedure TdmGDocumenti.EsportaFEEmesse;
var
   dlgEsportaFEEmesse: TdlgEsportaFEEmesse;
   XmlFile,
   ZipFile: TFileName;
   Xml: TStrings;
begin
   XmlFile := IncludeTrailingBackslash(GetWindowsTempFolder) +
                    ' - ' + roFEEsportaNUMERO.AsString + '.xml';
 
   Xml.Clear;
   Xml.Text := roFEEsportaXML.AsString;
   Xml.SaveToFile(XmlFile);
 
 
   AbZipper1.AddFiles(XmlFile, 0);
   AbZipper1.Save;
   DeleteFile(XmlFile);
 
   AbZipper1.CloseArchive;
   if (FileExists(ZipFile) and (FileSize(ZipFile) > 0)) then
     begin
       jvmlMail.Clear;
       jvmlMail.Subject := 'Invio Fattura Elettronica ' +
                            roFEEsportaNUMERO.AsString;
       jvmlMail.Body.Add(BodyText);
       jvmlMail.Attachment.Add(zipFile);
       jvmlMail.SendMail;
 
       DeleteFile(ZipFile);
     end;
end;
 
Ritengo che il problema si presenti alla chiamata di jvmlMail.SendMail 
perché il file .zip creato al volo nella cartella "TEMP" è presente.
 
In ogni caso lo stesso codice funziona su tutti i circa 30 PC che 
utilizzano l'applicazione di mia conoscenza e su altri che non conosco 
perché l'applicazione è rilasciata come free per emettere le fatture 
elettroniche e trasmetterle al s.d.i. tranne su questo PC che ho già 
verificato avere lo stesso s.o. Windows 10 pro versione 21H2 e stessa 
build 19044.2130 ed pack esperienza n. 120.2212.4180.0 del mio pc di 
sviluppo...
 
Grazie.

https://www.delphipraxis.net/194792-jvcl-tjvmail.html
 
 
E' in tedesco ma si intuisce il significato.
Fai il check sul tuo pc e vedi come è messa la chiave.
 
A.


Nel mio PC di sviluppo questa chiave non c'è :(
 
Domani provo sull'altro PC che, al momento, non è disponibile.
 
Grazie.

 
 
Niente da fare, sempre lo stesso errore :(
 
Grazie.

A questo punto io proverei a usare un altro componente.
Crea un progettino a parte, ci butti dentro un componente pop3 e/o imap di Indy, provi a fare la stessa cosa e vedi cosa succede.
 
A.

 
 
Con indy sul pc incriminato l'invio della posta funziona però mi sarebbe 
piaciuto sapere perché con JvMail no mentre su tutti gli altri pc si.
 
Grazie.

Io farei cosi:
 
procedure TdmGDocumenti.EsportaFEEmesse;
var
  errore: boolean;  //new
  dlgEsportaFEEmesse: TdlgEsportaFEEmesse;
  XmlFile,ZipFile: TFileName;
  Xml: TStrings;
begin
  XmlFile := IncludeTrailingBackslash(GetWindowsTempFolder) +
             ' - ' + roFEEsportaNUMERO.AsString + '.xml';
 
  Xml.Clear;
  Xml.Text := roFEEsportaXML.AsString;
  Xml.SaveToFile(XmlFile);
 
 
  AbZipper1.AddFiles(XmlFile, 0);
  AbZipper1.Save;
  DeleteFile(XmlFile);
  errore := false; //new
  AbZipper1.CloseArchive;
  if (FileExists(ZipFile) and (FileSize(ZipFile) > 0)) then
    begin
	  try
            jvmlMail.Clear;
            jvmlMail.Subject := 'Invio Fattura Elettronica ' +
           roFEEsportaNUMERO.AsString;
           jvmlMail.Body.Add(BodyText);
           jvmlMail.Attachment.Add(zipFile);
           jvmlMail.SendMail;
        except
         errore := true;
       end;		
      if errore then
        begin
          latuafunzione indy
        end;		
      DeleteFile(ZipFile);
    end;
end; 

 
 
Mi correggo, la soluzione funziona solo che per gli ambienti 64 bit e 
col software 64 bit la chiave del registro da aggiornare è questa:
 
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows Messaging Subsystem
 
Inserendo il valore stringa "MAPI" = "1"
 
Non si finisce mai di imparare ;)
 
Grazie.