-
FixBug.
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 inseriteCODICEusing 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 quindiCODICEMailAddress^ 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:CODICESmtpClient^ 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.CODICEclient->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ù necessarieCODICEdelete message;
client = nullptr;
La guida è stata presa da HTML.it e riscritta da Fixbug.