Newsgroup: it.comp.programmare.win32
Titolo: MAPI con Outlook 2000 in VC++ con MFC

            Stiamo creando un eseguibile che con dei parametri crea una mail
con un eventuale allegato. Nel caso in cui il gestore di posta predefinito è
Outlook Express funziona correttamente, ma se il gestore è Outlook 2000 e il
SO è Win2000 se vi è da allegare un file la procedura non funziona
correttamente dando un return value MAPI_E_ATTACHMENT_OPEN_FAILURE.
Qualcuno ha esperienza in tal senso?
Manca qualche parametro che per Outlook 2000 è necessario mentre non lo è
per Outlook Express?
Grazie.

> Qualcuno ha esperienza in tal senso?
Probabilmente c'e' qualche parametro sbagliato che Outlook express ignora.
Dovresti postare esattamente il codice che stai utilizzando, forse potrei
capire dov'e' il problema.

 ha scritto nel messaggio
news:c3s1vm$g2s$1...@lacerta.tiscalinet.it...

Allora vi è una evoluzione del problema: con una modifica apportata nella
versione debug continua a non funzionare mentre nella versione release
funzinoa correttamente (almeno sembra). Le righe precedenti sono remmate e
passavano come parametro 0 piuttosto che 0L alla funzione sendmail
Il pezzo di codice interessato dovrebbe essere:
 MapiFileDesc *pFileDesc = new MapiFileDesc[m_iNumeroAllegati];
 memset(pFileDesc, 0, sizeof(pFileDesc));
 TCHAR szTitolo[MAX_PATH];
 for(int i = 0; i < m_iNumeroAllegati; i++) {
  pFileDesc[i].nPosition = (ULONG)-1;
  // Questo è solo il titolo che verrà mostrato (per noi è uguale al nome
dell'allegato, senza path)
  ZeroMemory(szTitolo, sizeof(szTitolo));
  AfxGetFileName(m_strAllegato[i], szTitolo, _countof(szTitolo));
  pFileDesc[i].lpszFileName = szTitolo;
  // Questa è la path con il nome dell'allegato
  pFileDesc[i].lpszPathName = m_strAllegato[i].GetBuffer(0);
  pFileDesc[i].lpFileType = NULL;
  pFileDesc[i].ulReserved = 0;
  pFileDesc[i].flFlags = 0;
 }
 // * * * Destinatario/i
 MapiRecipDesc Dest;
 memset(&Dest, 0, sizeof(Dest));
 if(m_iNumeroDestinatariCC > 0) {
  Dest.ulRecipClass = MAPI_CC;
  Dest.lpszName = m_strDestinatarioCC[0].GetBuffer(0);
  Dest.lpszAddress = m_strDestinatarioCC[0].GetBuffer(0);
 }
 else {
  Dest.ulRecipClass = MAPI_TO; // MAPI_TO, MAPI_CC, MAPI_BCC, MAPI_ORIG
  Dest.lpszName = m_strDestinatario[0].GetBuffer(0);
  Dest.lpszAddress = m_strDestinatario[0].GetBuffer(0);
 }
 // * * * Prepara il messaggio
 MapiMessage message;
 memset(&message, 0, sizeof(message));
 message.lpszSubject  = m_strOggettoMail.GetBuffer(0);
 message.lpszNoteText = m_strTestoMail.GetBuffer(0);
 message.nFileCount   = m_iNumeroAllegati;
 message.lpFiles      = pFileDesc;
 message.nRecipCount  = 1;
 message.lpRecips     = &Dest;
 // prepare for modal dialog box
 AfxGetApp()->EnableModeless(FALSE);
// righe precedenti in cui dava sempre errore
// int nError = lpfnSendMail(0, (ULONG)0,
//  &message, MAPI_LOGON_UI|MAPI_DIALOG, 0);
// lpfnSendMail è un puntatore alla funzione MAPISendMail
 int nError = lpfnSendMail(0L, 0L,
  &message, MAPI_LOGON_UI|MAPI_DIALOG, 0L);
 AfxGetApp()->EnableModeless(TRUE);
 if(pFileDesc != NULL) {
  if(m_iNumeroAllegati > 0) {
   delete pFileDesc; // Cancella il puntatore
   pFileDesc = NULL;
  }
 }
 if (nError != SUCCESS_SUCCESS &&
  nError != MAPI_USER_ABORT && nError != MAPI_E_LOGIN_FAILURE)
 {
  AfxMessageBox(AFX_IDP_FAILED_MAPI_SEND);
 }
//Grazie   :-)


Al volo mi pare di ricordare che il secondo parametro anziche' 0L devi
mettere l'handle del tuo applicativo.
Domattina dovrei avere un po' di tempo per guardarci meglio e magari posso
essere piu' preciso.

 ha scritto nel messaggio
news:c3sfal$u4i$1...@lacerta.tiscalinet.it...

Grazie. Aspettiamo.

 pFileDesc[i].lpszFileName = szTitolo;
io non utilizzare una funzione  non documentata (come la AfxGetFileName) ma
piuttosto la _splitpath,