Inviare email in Visual C++

« Older   Newer »
 
  Share  
.
  1. FixBug
        +1   -1
     
    .

    User deleted


    In questo tutorial vedremo come inviare un mail in C++

    Creiamo una nuova applicazione CLR, adesso importiamo le librerie che ci servirannò, quindi inserite

    CODICE
    using namespace System;
    using namespace System::Net;
    using namespace System::Net::Mail;


    Ora tramite la classe MailMessage possiamo inviare un messaggio al server SMTP.
    Ecco come impostare mittente, destinatario e il contenuto della nostra mail.
    Aggiungiamo quindi

    CODICE
    MailAddress^ from = gcnew MailAddress("paolinopaperino@miaemail.com",
                                         "Paolino " + (wchar_t)0xD8 + " Paperino", System::Text::Encoding::UTF8);

    MailAddress^ to = gcnew MailAddress("paperina@tuaemail.com");

    MailMessage^ message = gcnew MailMessage(from, to);
    message->Body = "Ciao Mondo - questo è un semplice test per invio email " +
                   " da un applicazione scritta in c++. ";

    String^ someArrows = gcnew String(gcnew array<wchar_t>{L'\u2190', L'\u2191', L'\u2192', L'\u2193'});

    message->Body += Environment::NewLine + someArrows;
    message->BodyEncoding = System::Text::Encoding::UTF8;
    message->Subject = "Prova invio email" + someArrows;
    message->SubjectEncoding = System::Text::Encoding::UTF8;


    Ora impostiamo l'invio della mail tramite classe SmtpClient usando il protocollo SMTP.
    Quindi inseriamo:

    CODICE
    SmtpClient^ client = gcnew SmtpClient(args[1]);


    Adesso non ci resta che invocare il comando Invio, a tal proposito esistono due metodi uno sincrono ed uno asincrono.

    - Send Blocca l'esecuzione dell'applicazione finché l'email non è stata inviata

    - SendAsync Invece permette al thread di continuare l'esecuzione mentre l'email viene spedita

    SendAsync può essere utilizzato in maniera identica a come si potrebbe utilizzare Send, l'istanza di SmtpClient richiamerà eventuali sottoscrittori dell'evento SendCompleted, per controllare se l'email è stata inviata o meno.

    L'operazione asincrona non blocca l'esecuzione dell'applicazione e potrebbe capitare l'inconveniente di chiudere l'applicazione prima che l'email sia stata spedita, cancellando pertanto la trasmissione del messaggio. Per evitare ciò dobbiamo riferirci all'evento SendCompleted, e quindi aggiungere un delegato SendCompletedEventHandler all'evento.

    Il delegato SendCompletedEventHandler deve referenziare un metodo di callback che gestisce la notifica dell'evento SendCompleted. Infine per poter cancellare una trasmissione email asincrona si utilizza il metodo SendAsyncCancel.

    CODICE
    client->SendCompleted += gcnew SendCompletedEventHandler(SendCompletedCallback);

    String^ userState = "Prova 1";

    client->SendAsync(message, userState);

    Console::WriteLine("Invio del messaggio... premi il tasto 'c' se vuoi cancellare la mail. Premi un tasto qualsiasi per uscire.");

    String^ risp = Console::ReadLine();

    if (risp->ToLower()->StartsWith("c") && mailSent == false)
    {
     client->SendAsyncCancel();
    }


    il metodo Dispose quando si è terminato di utilizzare la classe SmtpClient per non tenere bloccate risorse ormai non più necessarie

    CODICE
    delete message;
    client = nullptr;


    La guida è stata presa da HTML.it e riscritta da Fixbug
     
    Top
    .
0 replies since 3/3/2012, 19:02   61 views
  Share  
.
Top