Публикация

Отправка письма из BPMonline без создания активности

Задача тривиальна, но в рамках базового функционала BPMonline решается только созданием активности типа e-mail от конкретного пользователя, что не всегда удобно.
Самый распространенный случай: просто отправить извещение пользователю "от системы" о появлении новой задачи, поставленной ему начальством со словами "Пахать планктон немедленно!" :smile:. В таком случае, когда начальство находит у себя в активностях это письмо, то не понимает что это и начинает задавать вопросы "За каким оно мне тут надо, убери немедленно!". Да и если таких извещений много, то можно представить что получается.

Выход прост! "Веселее, вы в хоккее!", как говорил Тарасов.
Надо просто вспомнить, что мы в .Net'e и все становится очень просто. :smile:

В БП создаём элемент типа Задание-сценарий, подключаем в Using'ах следующее
System.Net
System.Net.Mail
System.Text

Последний необязателен, но нужен для установки кодировки.
В скрипте пишем

var client = new SmtpClient("НАШ_ПОЧТОВЫЙ СЕРВЕР", ПОРТ);

var credential = new NetworkCredential("USER", "PASSWORD");
client.Credentials = credential;

var message = new MailMessage("ОТ КОГО", "КОМУ, "ТЕМА", "ТЕЛО ПИСЬМА");

По необходимости используем, смысл прозрачен, я думаю:
client.EnableSsl = true;
message.IsBodyHtml = true;

Для красоты и завершенности можно еще и так добавить (подключаем System.Text):
message.SubjectEncoding = Encoding.UTF8;
message.BodyEncoding = Encoding.UTF8;

client.Send(message);

И, вуаля, планктон пнут, работа кипит. :smile:

Работает на BPMonline 5.4, редакция On-Site. Работает с гуглом, яндексом и т.д., только порты соответствующие и ssl включать не забываем. Ну и, естественно с локальным почтовым сервером в вашей сети будет работать на ура.

Насчет редакции On-Demand и семерки, не знаю, не могу проверить нет у меня их.

Нравится

Поделиться

4 комментария

Спасибо! А как полностью скрипт выглядит ? Пробую на 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;

Всегда пожалуйста.:wink:
С наступающим.

Показать все комментарии