Добрый день.

С переходом на версию 7.* очень не хватает стандартного функционала работы с почтой, а именно указание произвольного Email отправителя.

В частности у сервисной службы есть специальная почта, для исходящих сообщений и есть персональные ящики. и получается, что для отправки сообщений от имени общего адреса необходимо этот адрес добавить в почтовые ящики и раздать доступ сервисной службе, вместо того, чтобы передавать почтовому серверу дополнительное поле - отправить от имени (behalf of)/sender и возложить проверку разрешений для пользователя на сервер.

Когда планируется вернуть это поле?

 

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

Здравствуйте!

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

Владислав, добрый день! Сейчас как раз искал решение такой проблемы. Есть достаточно простое обходное решение:

update MailboxSyncSettings
set SenderEmailAddress = 'имя, от которого надо отправить'
where Id= 'ID настройки почтовой синхронизации'

В EmailTemplateUserTaskSender есть метод CreateEmailMessage(), который формирует финальное письмо в нем вызывается метод GetSenderName(), который формирует отправителя, там вызывается метод GetSenderEsq(), который берет тот самый SenderEmailAddress из таблицы MailboxSyncSettings. Протестировал этот "хак" и у нас отправляются письма от тех. поддержки от лица почтовой рассылки.

Спасибо, Дмитрий. 

Интересное решение, но боюсь нам это не подходит, т.к. одновременно может отправляться несколько сообщений, а значит обязательно в части из них возникнут коллизии. В лучшем случае отправится письмо отправиться не от того имени, в худшем -вывалится в ошибку элемент изменения данных/скрипт...

Встроить туда проверку вроде мьютекса?

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

Вопрос

Подскажите, это считается нормальным, если письма, исходящие из системы, при нажатии на отправку письма (назовем это «желтый конвертик»), уходят (и доходят), прикрепляются как активность к данному кейсу, но их нет ни в исходящих, ни в системе, ни на самой почте (делегирована на Яндекс).

Ответ

Если письмо прикрепилось как активность, значит оно присутствует в системе. В данном случае необходимо проверить, чтобы у контакта, который отправляет письмо, в средствах связи был указан адрес, с которого он отправляет.



По вопросу отображения писем в Яндексе: так как отправка происходит по протоколу SMTP, то письмо не сохраняется на почтовом сервере. Данный функционал реализован только у Google и Exchange.

Нравится

Поделиться

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

Вопрос

При автоматической отправке email по процессу выдает ошибку "Сбой установки соединения из-за неожиданного формата пакета". При отправке письма из этого ящика вручную все работает.

Ответ

Данная проблема возникает из-за прав на почтовый ящик.

При отработке процесс пытается вычитать почтовый ящик, на который у пользователя нет прав. Из-за того, что прав нет, процесс вычитывает пустое поле и возникает ошибка.

Для того, чтобы процесс отрабатывал корректно и письмо могло отправится, необходимо, чтобы у пользователя, который выполняет запуск процесса, были права на почтовый ящик, а именно — на отправку писем.

Нравится

Поделиться

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

Добрый день, коллеги

Я из бизнес-процесса отправляю email по шаблону. Шаблон в справочник добавила. В шаблон передаю Id обращения и в конечном итоге на почту получаю письмо, которое в себе содержит определенные данные обращения (номер, ответственный, контакт\контрагент и тд).

Подскажите, а могу ли я как-то в шаблон отправить данные с детали (например, Жизненный цикл обращения)?

1 комментарий

Здравствуйте, Елена!

В текущей реализации приложения bpm'online нет возможности вывести в шаблон значение из связанного объекта (детали) или агрегирующие значения. Я зафиксировал и передал Ваше пожелание аналитикам продукта. Они рассмотрят возможность реализации в будущих версиях программного продукта.

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

Добрый день!

Столкнулся с такой проблемой: пытаюсь отправить письмо из бизнес процесса, а получаю ошибку.
Ошибка следующая:
Terrasoft.Mail.Sender.EmailException: Плохие данные.
---> System.Security.Cryptography.CryptographicException: Плохие данные.

в System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
в System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone)
в System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
в System.Security.Cryptography.CryptoStream.FlushFinalBlock()
в System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
в System.IO.Stream.Close()
в Terrasoft.Core.SecureTextDataValueType.GetValueForLoad(UserConnection userConnection, Object value)
в Terrasoft.Core.Entities.EntityColumnValue.LoadValue(Object value)
в Terrasoft.Core.Entities.EntityColumnValueCollection.ForceLoadColumnValue(String name, Object value)
в Terrasoft.Core.Entities.Entity.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap)
в Terrasoft.Core.Entities.EntityCollection.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap, Boolean needClear)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntitySchemaEntityCollection(UserConnection userConnection, IDataReader dataReader)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection)
в Terrasoft.Mail.SmtpClient.CreateMailCredentialByAddress(String address, Boolean ignoreRights)
в Terrasoft.Mail.SmtpClient.CreateSmtp(String address, Boolean ignoreRights)
в Terrasoft.Mail.SmtpClient.Send(EmailMessage emailMessage, Boolean ignoreRights)
--- Конец трассировки внутреннего стека исключений ---
в Terrasoft.Mail.SmtpClient.Send(EmailMessage emailMessage, Boolean ignoreRights)
в Terrasoft.Core.Process.Configuration.AutoEmailUserTaskSender.Execute(IEmailUserTaskMessageProvider messageProvider, ProcessExecutingContext context)
в Terrasoft.Core.Process.Configuration.EmailTemplateUserTask.InternalExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)

При разборе полётов определил что исключение вываливается в методе CreateMailCredentialByAddress класса SmtpClient, строка mailboxESQ.GetEntityCollection(_userConnection);

private MailCredentials CreateMailCredentialByAddress(string address, bool ignoreRights = false) {
var mailboxESQ = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "MailboxSyncSettings");
EntitySchemaQueryColumn userNameColumn = mailboxESQ.AddColumn("UserName");
EntitySchemaQueryColumn userPasswordColumn = mailboxESQ.AddColumn("UserPassword");
EntitySchemaQueryColumn isAnonymousAuthentication = mailboxESQ.AddColumn("IsAnonymousAuthentication");
EntitySchemaQueryColumn sendEmailsViaThisAccountColumn = mailboxESQ.AddColumn("SendEmailsViaThisAccount");
EntitySchemaQueryColumn smtpHostColumn = mailboxESQ.AddColumn("MailServer.SMTPServerAddress");
EntitySchemaQueryColumn smtpPortColumn = mailboxESQ.AddColumn("MailServer.SMTPPort");
EntitySchemaQueryColumn smtpSslColumn = mailboxESQ.AddColumn("MailServer.UseSSLforSending");
EntitySchemaQueryColumn smtpTimeoutColumn = mailboxESQ.AddColumn("MailServer.SMTPServerTimeout");
IEntitySchemaQueryFilterItem senderEmailAddressFilter = mailboxESQ
.CreateFilterWithParameters(FilterComparisonType.Equal, "SenderEmailAddress", address);
mailboxESQ.Filters.Add(senderEmailAddressFilter);
if (ignoreRights) {
mailboxESQ.UseAdminRights = false;
} else {
mailboxESQ.AddRightsFilters(_userConnection.CurrentUser.Id);
}
EntityCollection mailboxEntities = mailboxESQ.GetEntityCollection(_userConnection);
var mailCredentials = new MailCredentials();
if (mailboxEntities.Count == 0) {
throw new Sender.EmailException("ErrorOnSend", MailboxDoesNotExist);
}

Entity mailbox = mailboxEntities[0];
if (!mailbox.GetTypedColumnValue(sendEmailsViaThisAccountColumn.Name)) {
throw new Sender.EmailException("ErrorOnSend", NotAllowedSendingFromThisMailbox);
}
mailCredentials.Host = mailbox.GetTypedColumnValue(smtpHostColumn.Name);
mailCredentials.Port = mailbox.GetTypedColumnValue(smtpPortColumn.Name);
mailCredentials.UserName = mailbox.GetTypedColumnValue(userNameColumn.Name);
mailCredentials.UserPassword = mailbox.GetTypedColumnValue(userPasswordColumn.Name);
mailCredentials.UseSsl = mailbox.GetTypedColumnValue(smtpSslColumn.Name);
mailCredentials.Timeout = mailbox.GetTypedColumnValue(smtpTimeoutColumn.Name) * 1000;
mailCredentials.IsAnonymousAuthentication = mailbox.GetTypedColumnValue(isAnonymousAuthentication.Name);
return mailCredentials;
}

Нравится

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

Здравствуйте!

Судя по ошибке в поле UserPassword (таблица MailboxSyncSetting) хранится хэш, который не может быть расшифрован. Судя по всему там записано некорректное значение.

Попробуйте пересоздать почтовый ящик. В процессе необходимо указать вновь созданный ящик.

А по поводу алгоритма получения хэша можете сориентировать?

"Сурмачевский Евгений Александрович" написал:

А по поводу алгоритма получения хэша можете сориентировать?


Здравствуйте!

Данные колонки необходимо использовать исключительно через EntitySchemaQuery используя формат "Secure Text"

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