Отправка письма из 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'а:
[csharp]
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);
}
}
}
[/csharp]
Спасибо, Александр.
Для меня получилось достаточно этого(спасибо тех поддержке):
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;