Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C#] Allegato: da mail a DB

    Ciao a tutti,

    io sto sviluppando un'applicazione che legge le mail da Outlook e inserisce dati come

    oggetto
    mittente
    destinatario

    in un DB...... dovrei inserire anche gli allegati (immagini, documenti..ecc) nel campo di tipo LONGBLOB.... come si fa precisamente? Non so bene cosa convertire...... vi posto un pò di codice "depurato".....

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data.MySqlClient;
    using Microsoft.Office.Interop.Outlook;
    using CDO;
    using System.Runtime.InteropServices;
    using System.IO;


    namespace MailReader
    {
    class Program
    {
    string hh;
    static void Main(string[] args)
    {
    Application app = null;
    _NameSpace ns = null;
    MailItem item = null;
    MAPIFolder inboxFolder = null;
    MAPIFolder subFolder = null;

    string SQLQuery, SQLQuery2, SQLQuery3, str, FILENAME, CONTENT_SIZE, SQLQuery_att_id;
    int article_type_id;
    bool ticket_duplicate;

    try
    {
    app = new Application();

    ns = app.GetNamespace("MAPI");

    ns.Logon(null, null, false, false);


    inboxFolder = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox );



    for (int i = 1; i <= inboxFolder.Items.Count; i++)
    {
    try
    {

    if (inboxFolder.Items[i] is MailItem)
    {
    item = (MailItem)inboxFolder.Items[i];

    //SALVO ALLEGATI
    if (item.Attachments.Count > 0)
    {
    for (int x = 1; x <= item.Attachments.Count; x++)
    {
    string retrive_type = item.Attachments[i].FileName.ToString();
    string type = retrive_type.Substring(retrive_type.Length - 3);

    string CONTENT_TYPE = "";
    switch (type)
    {
    case "doc":
    CONTENT_TYPE = "application/msword; name=" + item.Attachments[i].FileName.ToString();
    break;

    case "xls":
    CONTENT_TYPE = "application/vnd.ms-excel; name=" + item.Attachments[i].FileName.ToString();
    break;

    case "lsx":
    CONTENT_TYPE = "application/vnd.ms-excel; name=" + item.Attachments[i].FileName.ToString();
    break;

    case "pdf":
    CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[i].FileName.ToString();
    break;

    case "gif":
    CONTENT_TYPE = "application/gif; name=" + item.Attachments[i].FileName.ToString();
    break;

    case "png":
    CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[i].FileName.ToString();
    break;

    case "rar":
    CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[i].FileName.ToString();
    break;

    case "zip":
    CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[i].FileName.ToString();
    break;

    default:
    CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[i].FileName.ToString();
    break;

    }

    FILENAME = item.Attachments[i].FileName.ToString();
    CONTENT_SIZE = item.Attachments[i].Size.ToString();

    Byte[] imgByte = null;
    imgByte = new Byte[item.Attachments[i]. -->.... incosa lo converto??


    }
    }
    }
    }
    }

    }

    }

  2. #2
    alla fine ci sono riuscito.....salvo prima il mio file su file system.....e poi lo scrivo sul DB convertendolo.... ora però ho un altro problema..... il file lo converto in un array di byte... lo scrivo nel mio campo di MySql (di tipo LONGBLOB)....ma quando tramite l'applicazione web lo vado a riprendere....mi dice che è corrotto....

    faccio una piccola premessa....questo programmino che legge le mail lo sto sviluppando per integrarlo ad un'applicazione che gestisce i ticket (OTRS)....quindi quelllo che faccio io è alimentare il DB di questa applicazione tramite questo programmino che legge le mie mail....

    tronando a noi.....ho inserito la mail con l'allegato sul DB..... da OTRS la vedo...vedo l'allegato....ma quando lo salvo e lo riapro dà errore..

    sul DB nella tabella degli allegati...nel campo LONGBLOB, se cerco di visualizzare un allegato diciamo non alimenato dal mio programma mi accorgo che (visualizzandolo con il binary editor) è bello piendo di caratteri...quelli alimenati dal mio programmino hanno pochissimi caratteri..

    questo è il codice che uso
    codice:
     //SALVO ALLEGATI
                         if (item.Attachments.Count > 0)
                                  {
                                       for (int x = 1; x <= item.Attachments.Count; x++)
                                                {
                                                    string retrive_type = item.Attachments[x].FileName.ToString();
                                                    string type = retrive_type.Substring(retrive_type.Length - 3);
                                                    string CONTENT_TYPE = "";
    
                                                    switch (type)
                                                    {
                                                        case "doc":
                                                              CONTENT_TYPE = "application/msword; name=" + item.Attachments[x].FileName.ToString();
                                                             break;
    
                                                        case "xls":
                                                            CONTENT_TYPE = "application/vnd.ms-excel; name=" + item.Attachments[x].FileName.ToString();
                                                            break;
    
                                                        case "lsx":
                                                            CONTENT_TYPE = "application/vnd.ms-excel; name=" + item.Attachments[x].FileName.ToString();
                                                            break;
    
                                                        case "pdf":
                                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                                            break;
    
                                                        case "gif":
                                                            CONTENT_TYPE = "application/gif; name=" + item.Attachments[x].FileName.ToString();
                                                            break;
    
                                                        case "png":
                                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                                            break;
    
                                                        case "rar":
                                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[i].FileName.ToString();
                                                            break;
    
                                                        case "zip":
                                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                                            break;
    
                                                        default:
                                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                                            break;
                                                    
                                                    }                                               
                                            
                     FILENAME = item.Attachments[x].FileName.ToString();
                      CONTENT_SIZE = item.Attachments[x].Size.ToString();
    
                       //Salvo il file su FS
                      item.Attachments[x].SaveAsFile("C:\\ecc ecc\\Visual Studio 2010\\Projects\\MailReader\\" + FILENAME);
                                            //
    
                       FileStream fs = new FileStream("C:\\ecc ecc\\Visual Studio 2010\\Projects\\MailReader\\" + FILENAME, FileMode.Open, FileAccess.Read);
                        BinaryReader br = new BinaryReader(fs);
                        Byte[] bytes = br.ReadBytes((Int32)fs.Length);
                        br.Close();
                        fs.Close();
                                            
                                      
                        //INSERIMENTO ARTICLE_ATTACHMENT 
    
                             MySqlDataReader reader_att_id;
                                            int article_id = 0;
    
                                            SQLQuery_att_id = "SELECT MAX(ID) AS ID FROM `otrs`.`article`";
                                            db.Execute_Query(SQLQuery_att_id);
                                            reader_att_id = db.Execute_Reader(SQLQuery_att_id);
    
                                            while (reader_att_id.Read())
                                            {
                                                 article_id = int.Parse(string.Format("{0}", reader_att_id["ID"]));
                                            }
    
                                            SQLQuery = " INSERT INTO `otrs`.`article_attachment` (ARTICLE_ID, FILENAME, CONTENT_SIZE, CONTENT_TYPE, CONTENT_ID, CONTENT_ALTERNATIVE, CONTENT, CREATE_TIME, " +
                                           "CREATE_BY, CHANGE_TIME, CHANGE_BY) VALUES (" + article_id + ", '" + FILENAME + "', '" + CONTENT_SIZE + "', '" + CONTENT_TYPE + "',NULL , NULL ,'" + bytes + "', now(), 0, now(), 0);";
    
                                            if (!db.Execute_Query(SQLQuery)) throw new System.Exception("Si è verificato un errore durante il salvataggio del ticket.");
                                                }
    dove sbaglio??


    thanks!!

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Il codice va formattato usando l'apposito tag [CODE]: vedi il Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    ciao, se metto i tag CODE però non va a capo!...mi mette tutto sulla stessa riga....

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da ttttttttttttttt
    ciao, se metto i tag CODE però non va a capo!...mi mette tutto sulla stessa riga....
    Incolla il codice nel messaggio e non all'interno della casella di testo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: Moderazione

    Originariamente inviato da alka
    Il codice va formattato usando l'apposito tag [CODE]: vedi il Regolamento.
    e aggiungo:

    che sia formattato in modo leggibile .

  7. #7
    ci riprovo....

    codice:
    //SALVO ALLEGATI
     if (item.Attachments.Count > 0)
    	 {
    		for (int x = 1; x <= item.Attachments.Count; x++)
     		{
    			string retrive_type = item.Attachments[x].FileName.ToString();
    			string type = retrive_type.Substring(retrive_type.Length - 3);
    			string CONTENT_TYPE = "";
    
    				switch (type)
                                    	{
                                             case "doc":
                                             CONTENT_TYPE = "application/msword; name=" + item.Attachments[x].FileName.ToString();
                                             break;
    
                                             case "xls":
                                             CONTENT_TYPE = "application/vnd.ms-excel; name=" + item.Attachments[x].FileName.ToString();
                                             break;
    
                                             case "lsx":
                                             CONTENT_TYPE = "application/vnd.ms-excel; name=" + item.Attachments[x].FileName.ToString();
                                             break;
    
                                             case "pdf":
                                             CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                             break;
    
                                             case "gif":
                                             CONTENT_TYPE = "application/gif; name=" + item.Attachments[x].FileName.ToString();
                                             break;
    
                                            case "png":
                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                            break;
    
                                            case "rar":
                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[i].FileName.ToString();
                                            break;
    
                                            case "zip":
                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                            break;
    
                                            default:
                                            CONTENT_TYPE = "application/octet-stream; name=" + item.Attachments[x].FileName.ToString();
                                            break;
                                                    
                                            }                                               
                                            
                                            FILENAME = item.Attachments[x].FileName.ToString();
                                            CONTENT_SIZE = item.Attachments[x].Size.ToString();
    
                                            //Salvo il file su FS
                                            item.Attachments[x].SaveAsFile("C:\\ecc ecc\\Visual Studio 2010\\Projects\\MailReader\\" + FILENAME);
                                            //
    
                                            FileStream fs = new FileStream("C:\\ecc ecc\\Visual Studio 2010\\Projects\\MailReader\\" + FILENAME, FileMode.Open, FileAccess.Read);
                                            BinaryReader br = new BinaryReader(fs);
                                            Byte[] bytes = br.ReadBytes((Int32)fs.Length);
                                            br.Close();
                                            fs.Close();
                                            
                                                    
                                                    //INSERIMENTO ARTICLE_ATTACHMENT 
    
                                            MySqlDataReader reader_att_id;
                                            int article_id = 0;
    
                                            SQLQuery_att_id = "SELECT MAX(ID) AS ID FROM `otrs`.`article`";
                                            db.Execute_Query(SQLQuery_att_id);
                                            reader_att_id = db.Execute_Reader(SQLQuery_att_id);
    
                                            while (reader_att_id.Read())
                                            {
                                                 article_id = int.Parse(string.Format("{0}", reader_att_id["ID"]));
                                            }
    
                                            SQLQuery = " INSERT INTO `otrs`.`article_attachment` (ARTICLE_ID, FILENAME, CONTENT_SIZE, CONTENT_TYPE, CONTENT_ID, CONTENT_ALTERNATIVE,  CONTENT, CREATE_TIME, " +
      "CREATE_BY, CHANGE_TIME, CHANGE_BY) VALUES (" + article_id + ", '" + FILENAME + "', '" + CONTENT_SIZE + "', '" + CONTENT_TYPE                                                      + "',NULL , NULL ,'" + bytes + "', now(), 0, now(), 0);";
    
                                            if (!db.Execute_Query(SQLQuery)) 
    						throw new System.Exception("Si è verificato un errore durante il salvataggio del ticket.");
                                                }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.