LightSwitch – Slanje Emaila putem SMTP

Slanje maila u okviru LightSwitch aplikacije se može ostvariti na više načina:

  • automatsko slanje emaila inicirano događajem nad podacima na serverskoj strani
  • slanje maila putem Outlook klijenta kreiranjem HTML sadržaja

Cijeli Solution ovog blog post-a možete preuzeti ovdje (LS_EmailDemo1  2.1 MB SkyDrive).

Funkcionalnost slanja maila može biti korisno sa apsekta funkcionisanja aplikacije jer može automatizovati određene procese. Na primjer, kada se kod evidencije online zakazivanja pregleda u doktorskoj ordinaciji prilikom popunjavanja podataka unese termin za pregled, da se automatski generiše mail sa informacijama o pregledu koji će dobiti odabrani doktor. Ili na primjer kod online naručivanja proizvoda da se prilikom kreiranja narudžbe pošalje mail službi za isporuku sa spiskom proizvoda koje je potrebno poslati kupcu. Ovaj način slanja maila možemo ostvariti slanjem maila koji sadrži tekst korištenjem SMTP servera kada se desi Insert u enitetu koji vodi evidenciju o narudžbama proizvoda ili pregledu pacijenata.

Takođe, pored prostog teksta u okviru maila korištenjem SMTP servera i slanja kroz LightSwitch aplikaciju direktno, moguće je kreirati HTML sadržaj maila gdje bi se omogućilo u okviru Outlook mail klijenta da se izvrši pregled i revizija podataka za slanje a potom i da se mail pošalje putem Outlook.

Automatsko slanje emaila – SMTP

Demonstriraću automatsko slanje maila za primjer online zakazivanja termina kod doktora. Nakon izbora željenog doktora unose se podaci o terminu za pregled:

DoctorListDetal

Slanje maila će se inicirati kada pacijent putem pristupa aplikaciji odradi unos podataka za pregled kod željenog doktora. Nakon snimanja podataka mail će biti poslat na email adresu izabranog doktora sa podacima u mailu koji opisuju podatke koje je pacijent unio prilikom rezervisanja termina.

Podaci o pregledu unosi pacijent:

AddNewAppointment

Podaci o pacijentu:

PatientDetail

Na osnovu podataka o doktoru i pacijentu, doktor će dobiti mail o informaciji da je zakazan pregled:

Mail

Model korišten u ovom primjeru se sastoji od tri entieta:

  • Appointment (Description, StartDate, EndDate, Notes)
  • Doctor (Name, EmailAddress)
  • Patient (Name, Email, Phone, Address, City, PostalCode)

Model

Slanje maila je inicirano prilikom Inserta podatka u bazu. Odabraćemo entiete Appointment i za entieta odabrati Inserted metodu (Write Code/Appointments_Inserted):

partial void Appointments_Inserted(Appointment entity)
{
  string subject = string.Format("New Appointment for Patient: {0}", entity.Patient.Name);
  string message = string.Format("{0}", "Message from Patient for examination") + Environment.NewLine + Environment.NewLine;

  message = message + string.Format("Patient: {0}", entity.Patient.Name) + Environment.NewLine;
  message = message + string.Format("Patient contact: {0}", entity.Patient.Email) + Environment.NewLine;
  message = message + string.Format("Time of appointment: ") + Environment.NewLine;
  message = message + string.Format("From {0} To {1}", entity.StartDate, entity.EndDate) + Environment.NewLine + Environment.NewLine;

  message = message + string.Format("Description: {0}", entity.Description) + Environment.NewLine;
  message = message + string.Format("Notes: {0}", entity.Notes) + Environment.NewLine;

  MailUtil mailUtil = new MailUtil(entity.Patient.Name, entity.Doctor.EmailAddress, entity.Doctor.Name, subject, message);
  try
  {
    mailUtil.SendEmail();
  }
  catch (Exception)
  {
    throw;
  }
}

Metoda koja zaista i šalje mail je SendEmail iz klase MailUtil. Ovdje smo definisali izgled maila, tačnije formatiranje sadržaja maila. MailUtil je Helper klasa, tj. klasa koja se nalazi na serverskoj strani projekta i uvijek je dostupna za sve entitete koji je mogu konzumirati. Ova klasa šalje mail korištenjem SMTP protokola. Da bi kreirali klasu potrebno je prvo odabrati File View pa potom na putanji Server/UserCode kreirati klasu.

Napomena: ukoliko ne postoji folder UserCode to znači da niste kreirali ni jedno serversko pravilo te je potrebno je u LogicalView za bilo koji entitet odabrati bilo koju metodu (preko Write Code) kako bi se generisao folder na serverskoj strani-UserCode. Nakon ove akcije se može obrisati ova metoda za entitet pri čemu će kao rezultat biti kreiran folder Server/UserCode.

Da bi koristili SMTP (Simple Mail Transfer Protocol) potrebno je na serverskoj strani dodati referencu na System.Net (Add Reference na Server/References) te u Helper klasi uključiti sledeće namespace:

using System.Net;
using System.Net.Mail;
using System.Configuration;

Klasa za slanje maila:

public class MailUtil
{
  private string _smtpSendingEmailAddress { get; set; }
  private string _smtpServer { get; set; }
  private string _smtpUserId { get; set; }
  private string _smtpPassword { get; set; }
  private int _smtpPort { get; set; }
  private bool _smtpSSL { get; set; }

  private string _mailFromName { get; set; }
  private string _mailToEmail { get; set; }
  private string _mailSubject { get; set; }
  private string _mailBody { get; set; }

  public MailUtil(string sendFromName, string sendToEmail, string subject, string body)
  {
    _mailFromName = sendFromName;
    _mailToEmail = sendToEmail;
    _mailSubject = subject;
    _mailBody = body;

    _smtpServer = "smtp.gmail.com";
    _smtpSendingEmailAddress = "sendingEmail";
    _smtpUserId = "AccountName";
    _smtpPassword = "AccountPswd";
    _smtpPort = 587;
    _smtpSSL = true;
  }

  public void SendEmail()
  {
    MailMessage mail = new MailMessage();
    MailAddress mailFrom = new MailAddress(_smtpSendingEmailAddress);
    MailAddress mailTo = new MailAddress(_mailToEmail);

    mail.From = mailFrom;
    mail.To.Add(mailTo);
    mail.Body = _mailBody;
    mail.Subject=_mailSubject;

    SmtpClient smtp = new SmtpClient(_smtpServer, _smtpPort);
    smtp.EnableSsl = _smtpSSL;
    smtp.Credentials = new NetworkCredential(_smtpUserId, _smtpPassword);
    smtp.Send(mail);
  }
}

Ukoliko se na primjer koristi gmail za slanje maila, potrebno je uključiti enkripciju SSL (smtp.EnableSsl = true).

Da bi primjer funkcionisao, potrebno je da unesete vaše podatke kako bi bilo moguće poslati mail:

_smtpServer = “SmtpServer”; //za gmail: smtp.gmail.com
_smtpSendingEmailAddress = “SendingEmail”;
_smtpUserId = “AccountName”;
_smtpPassword = “AccountPswd”;
_smtpPort = PortNumber; //za gmail: 587

U narednom postu će biti predstavljeno slanje maila putem Outlook klijenta kreiranjem HTML sadržaja te korištenjem COM automation za slanje mail-a (COM automation je osobina Silverlight 4).

About Spaso Lazarevic

Spaso Lazarevic is Senior Software Developer working with Microsoft technologies. Leader of .NET User Group Bijeljina, speaker at Microsoft events, writter and blogger. Microsoft MVP for Visual C#.
This entry was posted in Programming and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s