Sending an email using a NetLogic

In questo tutorial si vedrà come implementare un NetLogic per l’invio di una email tramite Q Studio. In questo esempio viene spiegata la creazione di un form di contatto.

Creazione del NetLogic

Per l’invio di email tramite C# si utilizzano alcune classi interne al namespace System.Net.Mail.

Il codice prevede l’utilizzo della classe SmtpClient, responsabile dell’invio del messaggio ad un server SMTP, e della classe EmailMessage, la quale rappresenta l’email da inviare.

Per iniziare è necessario creare un oggetto NetLogic: per farlo cliccare con il tasto destro la cartella Scripts e selezionare New >> Script di runtime e rinominare l’oggetto appena creato in EmailSender.

Dopo aver fatto doppio click sul NetLogic, verrà aperto l’editor C#. Aprire quindi il file EmailSender.cs e inserire il seguente codice:

using System;
using System.Net.Mail;
using System.Net;
using UAManagedCore;
using QPlatform.NetLogic;

public class EmailSender : BaseNetLogic
{
    [ExportMethod]
    public void SendEmail(string replyToAddress, string mailSubject, string mailBody)
    {
        if (string.IsNullOrEmpty(replyToAddress) || mailSubject == null || mailBody == null)
        {
            Log.Error("EmailSender", "Invalid values for one or more parameters.");
            return;
        }

        var fromAddress = new MailAddress("mail@domain.com", "Name"); // Email Sender
        var toAddress = new MailAddress("mail@domain.com", "Name"); // Email Receiver
        // Password for SMTP server authentication if required
        const string fromPassword = "Insert your password here.";

        var smtpClient = new SmtpClient
        {
            // Fill the following lines with your SMTP server info
            Host = "smtp.domain.com",
            Port = 587,
            EnableSsl = true, // Set to true if the server requires SSL.
            DeliveryMethod = SmtpDeliveryMethod.Network,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
        };

        var message = new MailMessage()
        {
            // Create the message.
            Subject = mailSubject,
            Body = mailBody
        };

        // Specify the sender
        message.From = fromAddress;

        // Recipient emails
        // The MailMessage.To property is a collection of emails, so you can add different recipients using:
        // message.To.Add(new MailAddress(...));
        message.To.Add(toAddress);

        // Add reply-to address
        message.ReplyToList.Add(replyToAddress);

        try
        {
            // Send email message
            smtpClient.Send(message);
            Log.Info("Message " + mailSubject + " sent successfully.");
        }
        catch (Exception ex)
        {
            // Insert here actions to be performed in case of an error when sending an email
            Log.Error("Error while sending message " + mailSubject + ", please try again. " + ex.Message);
        }
    }
}

Modificare quindi i valori delle istanze fromAddress e toAddress, inserendo le email desiderate deputate all’invio e alla ricezione del messaggio.

Note

In questo esempio la email viene inviata a un solo destinatario, ma risulta possibile aggiungerne altri utilizzando la proprietà To della classe MailMessage. Questa espone una collezione di indirizzi, quindi è sufficiente scrivere: mailMessage.To.Add(new MailAddress(...)

Nella variabile fromPassword deve essere inserita la password dell’account utilizzato per inviare la email in modo da effettuare l’autenticazione al server SMTP, se questo lo richiede.

Important

Su alcuni server di posta è possibile attivare l’autenticazione a due fattori. Nel caso questa procedura di sicurezza sia attivata è necessario generare una password per l’applicazione per il corretto funzionamento dello script..

Come ultima cosa configurare i dati della variabile smtpClient con i dati del server SMTP desiderato. La proprietà Credentials può risultare opzionale in alcuni casi, tipo nel caso in cui il server SMTP non richieda l’autenticazione.

Nell’esempio proposto la email inserita a tempo di esecuzione viene aggiunta alla proprietà ReplyToList. Tale property contiene una lista di indirizzi che verranno aggiunti automaticamente come destinatari in caso di risposta.

Il metodo Send dell’SmtpClient viene incapsulato all’interno di un costrutto try/catch in modo da gestire possibili eccezioni. Se il metodo ritorna senza lanciare eccezioni, l’invio si può considerare come andato a buon fine.

Creazione del form

Si proceda successivamente alla creazione del form da compilare per l’invio della email. Aggiungere quindi quattro etichette (ContactForm, EmailLabel, SubjectLabel e BodyLabel) e impostare le proprietà Text rispettivamente con Contact Form, Email, Subject e Body.

Creare inoltre tre caselle di testo chiamate EmailBox, SubjectBox e BodyBox e un pulsante chiamato SendButtton.

Dopo aver cliccato su quest’ultimo, selezionare il tasto + nella sezione Event view vicino a MouseClickEvent e selezionare Project >> Scripts >> EmailSender >> SendEmail. Espandere quindi la proprietà Method ed eseguire dei collegamenti dinamici in questa sequenza:

  • replyToAddress con Project >> UI >> MainWindow (type) >> EmailBox >> Text.

  • mailSubject con Project >> UI >> MainWindow (type) >> SubjectBox >> Text.

  • mailBody con Project >> UI >> MainWindow (type) >> BodyBox >> Text.

Scarica il progetto di esempio da qui.