Newsgroup: it.comp.os.linux.software
Titolo: [libsmtp] invio di + mail nella stessa sessione

Salve a tutti
dopo un po di ricerche e seguendo il consiglio di alcuni di voi, ho
cominciato a lavorare con la libreria libsmtp (ver 0.7.9)
Grazie anche agli esempi o in parte raggiunto il mio scopo: inviare una mail
con un attachment.
Purtroppo, però, riesco ad inviare un unica mail per connessione (!!!!)
qualcuno mi sa proporre uno stralcio di codice per riuscire a fare quanto
segue (per altro "lecito)
- connessione SMTP
- invio mail
- invio mail
...
- disconnessione SMTP
Segue uno stralcio del codice che ho usato io e un riuferimento su alcuni
tempi
grazie
Giorgio
------------------------------------------------------------------
   mailsession = libsmtp_session_initialize();
  /* Prepara FROM e SUBJECT (NON METTERE LA REPORT_ERROR) */
  libsmtp_set_environment (ffrom, subject, 0, mailsession);
  /* Prepara TO */
  if (libsmtp_add_recipient (LIBSMTP_REC_TO, tto, mailsession))
    return TrapErrorSmtp ("to", mailsession);
  /* Divide il MAINPART in tante parti */
  mainpart = libsmtp_part_new (NULL, LIBSMTP_MIME_MULTIPART,
LIBSMTP_MIME_SUB_MIXED, LIBSMTP_ENC_7BIT, LIBSMTP_CHARSET_NOCHARSET, "Test
MIME main part", mailsession);
  if (mainpart == NULL)
  {
    WriteLog(ERRORE,"adding part MULTIPART: %s", libsmtp_strerr
(mailsession));
    return 1;
  }
  if (!libsmtp_part_new (mainpart, LIBSMTP_MIME_TEXT,
LIBSMTP_MIME_SUB_PLAIN, LIBSMTP_ENC_7BIT, LIBSMTP_CHARSET_USASCII,
"Body-della-Mail", mailsession))
  {
    WriteLog(ERRORE,"adding part TESTO: %s", libsmtp_strerr (mailsession));
    return 1;
  }
  if (!libsmtp_part_new (mainpart, LIBSMTP_MIME_APPLICATION,
LIBSMTP_MIME_SUB_ZIP, LIBSMTP_ENC_BASE64, LIBSMTP_CHARSET_NOCHARSET,
"File-Zippato.zip", mailsession))
  {
    WriteLog(ERRORE,"adding part ZIP: %s", libsmtp_strerr (mailsession));
    return 1;
  }
  /* Connession e SMTP da 4" a 12" circa*/
  if (libsmtp_connect (server, 0, 0, mailsession))
    return TrapErrorSmtp ("connect", mailsession);
  if (libsmtp_dialogue (mailsession))
    return TrapErrorSmtp ("dialogo", mailsession);
  /* Invia gli headers*/
  if (libsmtp_headers (mailsession))
    return TrapErrorSmtp ("headers", mailsession);
  if (libsmtp_mime_headers (mailsession))
    return TrapErrorSmtp ("MIME header", mailsession);
  /* comincio ad inviare mail e attach */
  if (libsmtp_part_send (body, strlen (body), mailsession))
    return TrapErrorSmtp ("text", mailsession);
  /* Passa alla part successiva */
  if (libsmtp_part_next (mailsession))
    return TrapErrorSmtp ("next: 1->2", mailsession);
  /* carico l'attach (un file zip) che leggo in tanti blocchi*/
  zipbuffer=malloc (4098);
  while ((zipfile_read = fread (zipbuffer, 1, 4096, zipfile)))
    if (libsmtp_part_send (zipbuffer, zipfile_read, mailsession))
      return TrapErrorSmtp ("zip", mailsession);
  }
  fclose (zipfile);
  free (zipbuffer);
  /* fin edel body 2" circa*/
  if (libsmtp_body_end (mailsession))
    return TrapErrorSmtp ("body-fine", mailsession);
  /* devo uscire dalla connessione!!!! */
  if (libsmtp_quit (mailsession))
    return TrapErrorSmtp ("quit", mailsession);
  }
...

con un attachment.
Se devi solo inviare mail con attachment prova "biabam":
Example:
echo "Here is the tarball you requested" | \ 
  biabam foobar-0.7.8.tar.gz -s "Answer to your request" 
jo...@doe.org
Ciao.
-- 
Zio Ciano.