Mail con c#

di il
34 risposte

Mail con c#

Salve a tutti, mi chiedevo se con c# è possibile preparare una mail con tanto di allegato.
Dico preparare, perchè vorrei che l'email si aprisse poi nel programma di posta predefinito, per essere inviata con quest'ultimo.

In rete si trovano esempi di come inviarla direttamente da c#, ma non su come inviarla dal programma di posta predefinito.

Grazie.

34 Risposte

  • Re: Mail con c#

    Penso che visto che vuoi visualizzare e spedire da un programma esistente dovresti vedere se questo software espone delle funzioni per fare quello che ti proponi
  • Re: Mail con c#

    Il programma di posta predefinito, quindi potrebbe essere un qualunque software di posta elettronica.

    Questa cosa che ti si apre in automatico il software di posta elettronica predefinito, l'ho vista già diverse volte, ma non capisco come si faccia.
  • Re: Mail con c#

    Ti do degli spunti poi devi cercare.
    Prova aprendo il prompt dei comandi cmd, e lancia il programma di posta elettronica, naturalmente includendo tutto il percorso dell'eseguibile.
    Quando sei riuscito a lanciare il programma di posta elettronica da riga comando, concentrati nel trovare i parametri aggiuntivi della riga di comando, non so magari basta scrivere ">C:\program files\office\outlook.exe -percorsomail\Email.eml" o qualcosa di simile..
    Quando hai trovato come si scrive il comando dalla riga di comando, in C# puoi replicare il tutto facilmente.
    Per sapere invece il software di posta predefinito, l'unica soluzione che mi viene in mente è leggerla nel registro di sistema:
    HKEY_LOCAL_MACHINE > SOFTWARE > Clients > Mail

    Se devi automatizzare il tutto, anche sapere quali sono i percorsi predefiniti dell'ambiente, in cui il programma gira, ti farà comodo:
    
        class Program
        {
            static void Main(string[] args)
            {
                foreach (System.Environment.SpecialFolder Cartella in Enum.GetValues(typeof(System.Environment.SpecialFolder)))
                {
                    Console.WriteLine(Enum.GetName(typeof(System.Environment.SpecialFolder), Cartella));
                    Console.WriteLine("GetFolderPath: {0}", System.Environment.GetFolderPath(Cartella));
                    Console.WriteLine();
                }
                Console.ReadKey();
            }
        }
    
  • Re: Mail con c#

    Scusa ma non ho capito cosa intendi per riga di comando.
    Per lanciare da cmd, credo serva entrare dentro ad una cartella con il comando cd, poi nella sotto cartella, e così via fino ad arrivare al .exe

    Ho provato, ma devo prima entrare nella cartella che contiene il .exe, quindi servono almeno 2 passaggi:
    Nel mio caso per lanciare thunderbird, prima devo entrare nella cartella quindi digitare:

    cd Program Files (x86)\Mozilla Thunderbird
    e successivamente posso lanciare il thunderbird.exe
    tra l'altro non mi pare ci siano parametri aggiuntivi da inserire, almeno io non ne ho trovati
  • Re: Mail con c#

    Sono due cose diverse
    Mailto: e thunderbird
  • Re: Mail con c#

    +m2+ ha scritto:


    Sono due cose diverse
    Mailto: e thunderbird
    non capisco cosa vuoi dire, se clicco su un link mailto: ..... , si apre l'email con il programma di posta predefinito, nel mio caso thunderbird
  • Re: Mail con c#

    Nella finestra dos (cmd), da qualsiasi posizione sei puoi lanciare il programma che vuoi scrivendo il percorso completo senza usare cd, non avendo nel mio PC nessun programma di posta uso notepad.
    Supponiamo che quando apri cmd, trovi questra situazione, ma qualsiasi altra è lo stesso:

    C:\Users\Utente>

    Se scrivi direttamente: C:\Windows\Notepad.exe (adatta al tuo percorso se serve)

    Si apre notepad vuoto

    Ora trova il percorso di un file .txt e aggiungilo al comando che lancia notepad:

    >C:\Windows\Notepad.exe C:\Users\Utente\Docunents\test.txt

    si apre notepad con dentro il file test.txt

    Spiego ulteriormente
    >C:\Windows\Notepad.exe (è il comando, che apre notepad)
    C:\Users\Utente\Docunents\test.txt (è l'argomento, che dice a notepad di caricare anche il file testo test.txt)

    Ho messo dei percorsi assoluti e tale approcio funzionerà solo se sono giusti.
    Questo è il motivo perché ti ho postato il codice che trova i percorsi del pc in cui il tuo applicativo gira.

    Quando ti sarà chiaro il concetto, in C# poui usare Shell32.Shell (serve il riferimento com) oppure
    System.Diagnostics.Process, che automatizza alcune cose.

    P.S. nella finestra Dos (cmd) non devi ogni volta riscrivere tutto, usa Freccia Su e Giu, per ciclare tutti i comandi digitati.
  • Re: Mail con c#

    C'è qualcosa che non torna
    Prima quando ti ho detto che non riesco a lanciare direttamente thunderbird da riga di comando, è perchè ho fatto delle prove

    L'eseguibile .exe di thunderbird si trova ne percorso C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe

    se inserisco direttamente tutto l'indirizzo nel cmd mi esce che \Program non è riconosciuto come comando.

    Se provo con notepad invece funziona tutto C:\Windoiws\notepad.exe apre il notepad, mentre invece
    c:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe restituisce errore.

    Ovviamente l'indirizzo è giusto, perchè se lancio cd Program Files (x86)\Mozilla Thunderbird entro nella cartella, e se poi lancio thunderbird.exe avvio l'applicazione


    Poi comunque se apro un file txrt, mi sembra ovvio che si apre il programma predefinito per leggere i file txt

    ma io non ho file email da aprire, le email stanno chissà dove, probabilmente sul server nemmeno staranno sul mio computer.
  • Re: Mail con c#

    Usa le virgolette " per racchiudere il percorso
  • Re: Mail con c#

    Da riga comando se i percorsi hanno degli spazi vanno racchiusi tra virgolette.
    L'argomento è una serie di istruzioni che si da al programma in apertura, notepad si apre con il .txt, non perché i .txt sono associati a notepad, ma perché lo hai passato come argomento.

    Per esempio Mozilla Firefox:
    >”C:\Program Files (x86)\Mozilla Firefox\firefox.exe” —url www.google.i (apre firefox con l'url specificato)

    >”C:\Program Files (x86)\Mozilla Firefox\firefox.exe” —jsconsole (apre la console di firefox)
  • Re: Mail con c#

    La cosa e' decisamente piu' complicata, e comunque la risposta e' ""fondamentalmente""

    non si puo' fare.

    (comunque c'e' un trucco )

    Dove sta' l'inghippo? Sta' nel CAPIRE come e' fatta una mail.

    Una mail NON E' un file, ma uno stream di dati inviati DIRETTAMENTE sul canale di compunicazione TCP/IP usato per collegarsi al server SMTP (il POP/IMAP e' in RICEZIONE).

    L'idea e' SIMILE all'HTTP, ma mentre l'HTTP prevede esplicitamente l'esistenza di file (necessari per risolvere le URL), una email e' giusto un messaggio da inviare creato al momento dell'invio.

    Tool come Outlook, Thunderbird, ..., mettono a disposizione dei servizi che ti permettono di ""salvare"" un messaggio che stai preparando. Ma questi sono servzi INTERNI all'applicazione.

    ""Filosoficamente"" parlando, tu NON PUOI/NON DEVI sapere come un software e' implementato, ma conoscere SOLO i servizi che mette a disposizione e progettati ESPLICITAMENTE per essere messi a disposizione. Di una libreria, ti servono le API, NON come la libreria e' stata implementata.

    ======================

    La soluzione ci sarebbe (devi cercare la documentazione) ma, di nuovo ""filosificamente"" parlando, non e' un ""apertura di una mail"" ma una ""IMPORTAZIONE di una mail"".

    I tool permettono di esportare/importare mail in una serie di formati (piu' o meno) standard.

    Quello che devi fare e' creare il file rappresentante la tua mail in versione ""esportata"" e quindi chiedere all tool designato di ""importarla"".
  • Re: Mail con c#

    GianlucaB ha scritto:


    Salve a tutti, mi chiedevo se con c# è possibile preparare una mail con tanto di allegato.
    Dico preparare, perchè vorrei che l'email si aprisse poi nel programma di posta predefinito, per essere inviata con quest'ultimo.

    In rete si trovano esempi di come inviarla direttamente da c#, ma non su come inviarla dal programma di posta predefinito.

    Grazie.
    Si. da C# devi creare la mail con allegati e salvarla nel formato .eml
    Per aprire il .eml nel programma di posta predefinito, basta cliccare il file due volte, se l'estensione è associata.

    Se invece vuoi dal tuo applicativo C#, aprire il programma di posta predefinito con dentro la mail precedentemente preparata e salvata, senza preoccuparti se l'estenzione .eml è associata, guarda le precedenti risposte.

    Se invece intendi che da C# vuoi inviare la mail, estraendo le credenziali di invio memorizzate nel programma di posta predefinito: server, utente, password. Non si può fare.
  • Re: Mail con c#

    Sinceramente non ho provato, ma ho visto guide dove è possibile inviare una mail direttamente da c#
    .net mette a disposizione System.Net.Mail, che permette di inviare mail, basta avere una account mail, ed utilizzare il server smtp e le credenziali di accesso.

    Il problema è che in questo modo la mail non viene inviata con il programma di posta predefinito, e si rischia di perderne traccia una volta inviata.

    In realtà il modo per aprire il programma di posta predefinito, lo avevo già pure trovato, basta utilizzare la solita sintassi che si utilizza ad esempio con i link mailto del html.

    System.Diagnostics.Process.Start(@"mailto:mail@mail.com?subject=Test invio&body=prova invio email&attachment="c:\miofile.txt"");
    Funziona quasi tutto, il programma predefinito si apre, l'indirizzo email viene correttamente già inserito, l'oggetto della mail anche, e il corpo del messaggio correttamente inserito.

    Il problema è che non viene allegato il file, ma da una ricerca ho capito che a causa di nuove implementazioni di sicurezza, non è più possibile allegare file con la procedura mailto.

    Quindi speravo che con c# fosse possibile fare qualcosa di più che con il semplice html.
  • Re: Mail con c#

    GianlucaB ha scritto:


    Sinceramente non ho provato, ma ho visto guide dove è possibile inviare una mail direttamente da c#
    .net mette a disposizione System.Net.Mail, che permette di inviare mail, basta avere una account mail, ed utilizzare il server smtp e le credenziali di accesso.

    Il problema è che in questo modo la mail non viene inviata con il programma di posta predefinito, e si rischia di perderne traccia una volta inviata.
    La mail si può inviare da C#, la mail non si perde, resta nel server che hai usato per l'invio, alla voce "posta inviata"
    Nel server non nel programma di posta elettronica usato sul pc, a meno che non si attiva il download della posta inviata, la procedura cambia in base al programma di posta usato.
    Per vederla devi accedere all'account di posta eletronica web.
Devi accedere o registrarti per scrivere nel forum
34 risposte