Отправка письма из BPMonline без создания активности
Задача тривиальна, но в рамках базового функционала BPMonline решается только созданием активности типа e-mail от конкретного пользователя, что не всегда удобно.
Самый распространенный случай: просто отправить извещение пользователю "от системы" о появлении новой задачи, поставленной ему начальством со словами "Пахать планктон немедленно!" . В таком случае, когда начальство находит у себя в активностях это письмо, то не понимает что это и начинает задавать вопросы "За каким оно мне тут надо, убери немедленно!". Да и если таких извещений много, то можно представить что получается.
Выход прост! "Веселее, вы в хоккее!", как говорил Тарасов.
Надо просто вспомнить, что мы в .Net'e и все становится очень просто.
В БП создаём элемент типа Задание-сценарий, подключаем в Using'ах следующее
System.Net
System.Net.Mail
System.Text
Последний необязателен, но нужен для установки кодировки.
В скрипте пишем
var credential = new NetworkCredential("USER", "PASSWORD");
client.Credentials = credential;
var message = new MailMessage("ОТ КОГО", "КОМУ, "ТЕМА", "ТЕЛО ПИСЬМА");
По необходимости используем, смысл прозрачен, я думаю:
message.IsBodyHtml = true;
Для красоты и завершенности можно еще и так добавить (подключаем System.Text):
message.BodyEncoding = Encoding.UTF8;
client.Send(message);
И, вуаля, планктон пнут, работа кипит.
Работает на BPMonline 5.4, редакция On-Site. Работает с гуглом, яндексом и т.д., только порты соответствующие и ssl включать не забываем. Ну и, естественно с локальным почтовым сервером в вашей сети будет работать на ура.
Насчет редакции On-Demand и семерки, не знаю, не могу проверить нет у меня их.
Спасибо! А как полностью скрипт выглядит ? Пробую на 7-ке, хочу посмотреть, но сомневаюсь, что все верно сделал.
У меня оно вот так в результате получилось, в виде отдельного namespace'а:
namespace Terrasoft.MailToContact { using System; using System.Data; using System.Net; using System.Net.Mail; using System.Text; using Terrasoft.Core; using Terrasoft.Core.DB; class MailToContact { public static void SendNotificationToContact(UserConnection CurrentUserConnection, Guid ContactId, string Subject, string Body, string Email, bool Ssl ) { string SendTo = ""; if ( String.IsNullOrWhiteSpace(Email) ) { Select selectemail = new Select(CurrentUserConnection). Column("Email"). From("Contact"). Where(Column.Const(ContactId.ToString())).IsEqual("Id") as Select; using (var dbExecutor = CurrentUserConnection.EnsureDBConnection()) { using (IDataReader dr = selectemail.ExecuteReader(dbExecutor)) { if (dr.Read()) { SendTo = dr[0].ToString(); } } } }else{ SendTo = Email; } var client = new SmtpClient("ПОЧТОВЫЙ_СЕРВЕР", ПОРТ); var credential = new NetworkCredential("LOGIN", "PASSWORD"); client.Credentials = credential; var message = new MailMessage("ОБРАТНЫЙ_АДРЕС", SendTo, Subject, Body); if (Ssl) { client.EnableSsl = true; } message.IsBodyHtml = true; message.SubjectEncoding = Encoding.UTF8; message.BodyEncoding = Encoding.UTF8; client.Send(message); } } }
Спасибо, Александр.
Для меня получилось достаточно этого(спасибо тех поддержке):
string SendTo = "";
var client = new SmtpClient("ПОЧТОВЫЙ_СЕРВЕР", ПОРТ);
var credential = new NetworkCredential("LOGIN", "PASSWORD");
client.Credentials = credential;
var Subject = "The Topic";
var Body = "The Body!";
var message = new MailMessage("почта@yandex.ru", SendTo, Subject, Body);
//client.EnableSsl = true;
message.IsBodyHtml = true;
message.SubjectEncoding = Encoding.UTF8;
message.BodyEncoding = Encoding.UTF8;
client.Send(message);
return true;