Programowe wysyłanie maili¶
Prosty sposób¶
Aby wysłać maila z kodu C# metody obiektu lub z reguły Schedulera napisz:
API.SendEmail("adres@sente.pl","Tytuł","Treść");
Serwery SMTP różnych dostawców czasem pozwalają różnicować adres konta z którego wysyłamy maila UserName od adresu, jaki zostanie podany w polu nadawca wiadomości SendFrom. Np. u googla możemy tak zrobić pod warunkiem, że mamy to inne konto podlinkowane jako połączone z kontem użytkownika, w przeciwnym wypadku parametr SendFrom będzie ignorowany.
Funkcja zadziała, jeśli w pliku smd zostanie skonfigurowane konto serwera SMTP, przez który będzie wysyłana poczta.
Zaawansowany sposób¶
Rekomendowany sposób¶
Rekomendowany sposób opiera się na kupionej przez Sente, specjalistycznej bibliotece Limilabs.Mail i dużo lepiej współpracuje z różnymi serwerami SMTP.
Oto przykład z kodu Neosa.
public static void Email()
{
MailBuilder mb = new MailBuilder();
mb.From.Add(new MailBox("adres e-mail adresata"));
MailAddressParser map = new MailAddressParser();
foreach (var addr in map.Parse("adres e-mail odbiorcy"))
mb.To.Add(addr);
mb.Subject = "Temat wiadomości";
var text = "Treść wiadomości";
if (text.Contains("<html>"))
mb.Html = text;
else
mb.Text = text;
string path = API.GetRepositoryFilePath("nazwa pliku z rozszerzeniem","nazwa repozytorium z tabeli s_storage",true);
MimeData attachment = mb.AddAttachment(path);
var res = API.SendEmail(new List<IMail>() { mb.Create() });
}
W Schedulerze trzeba dla kilku obiektów na razie podawać pełen namespace, więc również zamieszczam przykład sprawdzony.
public static void Email()
{
var mb = new Limilabs.Mail.MailBuilder();
mb.From.Add(new Limilabs.Mail.Headers.MailBox("powiadomienia.sente@lobos.pl"));
var map = new Limilabs.Mail.Headers.MailAddressParser();
foreach (var addr in map.Parse("f.hoffmann@sente.pl"))
mb.To.Add(addr);
mb.Subject = "Temat wiadomości";
var text = "Treść wiadomości";
if (text.Contains("<html>"))
mb.Html = text;
else
mb.Text = text;
string path = API.GetRepositoryFilePath("201602_POTWUTARGUSKLEP7_1475.pdf","CRMDOC",true);
var attachment = mb.AddAttachment(path);
var res = API.SendEmail(new List<Limilabs.Mail.IMail>() { mb.Create() });
return "";
}
Stary sposób¶
Ten sposób został zachowany dla kompatybilności wstecznej z już istniejącymi rozwiązaniami. Opiera się o bibliotekę System.Net.Mail i może nie współpracować z serwerami pocztowymi które w różny pokręcony sposób implementują standard SMTP (u nas np. Lobos, IBS), działa jednak np. dla GMaila.
Aby wysłać maila z załącznikami lub kilka maili na raz, należy wykorzystać bardziej zaawansowany prototyp funkcji SendEmail. Parametrem tej funkcji jest lista elementów klasy MailMessage.
using (System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage())
{
message.From = new System.Net.Mail.MailAddress("ja@mojadomena.pl");
message.To.Add("ty@twojadomena.pl");
message.Subject = "Temat wiadomości";
message.Body = "Treść wiadomości";
if (message.Body.Contains("<html>")) message.IsBodyHtml = true;//czy treść jest HTMLem?
//wyciągamy załącznik jako dokument z repozytorium
string path = API.GetRepositoryFilePath("plik.pdf","CRMDOC",true);
//jesli chcemy wyciągnąć załącznik z TOWPLIKI, to używamy funkcji API.GetBinaryFilePath(...)
message.Attachments.Add(new System.Net.Mail.Attachment(path));
//do funkcji SendEmail przekazujemy listę, gdyż możemy wysłać kilka wiadomości na raz
var res = API.SendEmail(new List<System.Net.Mail.MailMessage>() { message });
//wynikiem funkcji jest lista wszystkich wyjątków które wystąpiły
if (res.Any()) throw res.First();
}
Bardziej zaawansowany sposób¶
Przy użyciu Neos.API¶
Jeżeli chcemy wysyłać maile używając innego konta niż skonfigurowane w pliku smd, możemy skorzystać z klas, które oferuje biblioteka Limilabs.Mail.
public static void Email()
{
string senderMail = "j.kowalski@sente.pl";
string senderName = "Jan Kowalski";
string recipientMail = "a.nowak@sente.pl";
string subject = "Spotkanie kwartalne";
string content = "Cześć Andrzej! Pamiętaj o uzupełnieniu danych kwartalnych w prezentacji.";
string accountName = "j.kowalski@sente.pl";
string accountPass = "szefuncio01";
var mb = new Limilabs.Mail.MailBuilder();
var map = new Limilabs.Mail.Headers.MailAddressParser();
mb.From.Add(new Limilabs.Mail.Headers.MailBox(senderMail, senderName));
foreach (var addr in map.Parse(recipientMail))
mb.To.Add(addr);
mb.Subject = subject;
mb.Text = content;
Limilabs.Mail.IMail email = mb.Create();
using (Limilabs.Client.SMTP.Smtp smtp = new Limilabs.Client.SMTP.Smtp())
{
smtp.ConnectSSL("smtp.sente.pl");
smtp.UseBestLogin(accountName, accountPass);
Limilabs.Client.SMTP.ISendMessageResult result = smtp.SendMessage(email);
if (result.Status == Limilabs.Client.SMTP.SendMessageStatus.Success)
{
API.ShowMessageBox("Wiadomość została wysłana!", "Info");
}
else if (result.Status == Limilabs.Client.SMTP.SendMessageStatus.Failure)
{
API.ShowMessageBox("Pojawił się problem z wysłaniem wiadomości!", "Info");
}
smtp.Close();
}
}
Przy użyciu plugina Neos.Email¶
Plugin daje nam łatwiejszą możliwość wysyłania maili z dowolnych skrzynek i ładnie ukrywa szczegóły implmementacyjne. Instrukcja tutaj
Integracja z GMail¶
Uwaga!
Google planuje zrezygnować ze wsparcia LSA, dlatego zalecamy konfigurację poprzez hasło aplikacyjne fa2gmail