protected abstract List <MessageInfo <TMessage> > OnReceive(MessageServiceBase <TMessage> service);
/// <summary>Creates service definition that can be registered with a server</summary> /// <param name="serviceImpl">An object implementing the server-side handling logic.</param> public static grpc::ServerServiceDefinition BindService(MessageServiceBase serviceImpl) { return(grpc::ServerServiceDefinition.CreateBuilder() .AddMethod(__Method_SendMessage, serviceImpl.SendMessage) .AddMethod(__Method_SendTaskMessage, serviceImpl.SendTaskMessage).Build()); }
/// <summary> /// </summary> protected sealed override bool OnPrepare(MessageInfo <TMessage> messageInfo, MessageServiceBase <WebApplication, TMessage> service) { return(OnPrepare(messageInfo, (MessageServiceBase <TMessage>)service)); }
/// <summary> /// См. <see cref="OutcomingMessageSender{TMessage}.OnSend(MessageInfo{TMessage}, MessageServiceBase{TMessage})"/>. /// </summary> protected override bool OnSend(MessageInfo <EmailMessage> message, MessageServiceBase <EmailMessage> service) { try { var mailMessage = new MailMessage() { From = new MailAddress(message.Message.From.ContactData, string.IsNullOrEmpty(message.Message.From.Name) ? message.Message.From.ContactData : message.Message.From.Name), SubjectEncoding = Encoding.UTF8, Subject = message.Message.Subject, IsBodyHtml = true, BodyEncoding = Encoding.UTF8, Body = message.Message.Body?.ToString(), }; var developerEmail = AppCore.WebConfig.DeveloperEmail; if (Debug.IsDeveloper && string.IsNullOrEmpty(developerEmail)) { return(false); } message.Message.To.ForEach(x => mailMessage.To.Add(new MailAddress(Debug.IsDeveloper ? developerEmail : x.ContactData, string.IsNullOrEmpty(x.Name) ? x.ContactData : x.Name))); try { getClient().Send(mailMessage); message.StateType = MessageStateType.Completed; return(true); } catch (SmtpException ex) { var canBeResend = true; service.RegisterServiceEvent(EventType.Error, "SMTP - ошибка отправки письма", null, ex); //if (ex.Message.Contains("Message rejected: Email address is not verified")) //{ // var match = System.Text.RegularExpressions.Regex.Match(ex.Message, "Message rejected: Email address is not verified. The following identities failed the check in region ([^:]+): (.+)"); // if (match.Success) // { // throw new Exception($"Добавьте адрес '{match.Groups[2].Value}' в раздел 'Identity Management/Email Addresses', либо снимите ограничения на отправку писем в регионе '{match.Groups[1].Value}'."); // } // canBeResend = false; //} if (canBeResend) { switch (ex.StatusCode) { case SmtpStatusCode.ServiceClosingTransmissionChannel: case SmtpStatusCode.ServiceNotAvailable: case SmtpStatusCode.TransactionFailed: case SmtpStatusCode.GeneralFailure: try { _client.Dispose(); _client = null; } catch { } getClient().Send(mailMessage); message.StateType = MessageStateType.Completed; return(true); default: throw; } } else { throw; } } //todo добавить прикрепление файлов в отправку писем. //if (is_array($files) && count($files) > 0) // foreach ($files as $k=>$v) // { // if (isset($v['url"]) && isset($v['name"])) // $mail->AddAttachment(SITE_PATH.$v['url"], $v['name"].'.'.pathinfo($v['url"], PATHINFO_EXTENSION)); // else if (isset($v['path"]) && isset($v['name"])) // $mail->AddAttachment($v['path"], $v['name"]); // } //$success = $mail->send(); } catch (FormatException ex) { service.RegisterServiceEvent(EventType.Error, "SMTP - ошибка отправки письма", "Некорректный Email-адрес", ex); message.StateType = MessageStateType.Error; message.State = "Некорректный Email-адрес"; return(true); } catch (Exception ex) { service.RegisterServiceEvent(EventType.Error, "SMTP - ошибка отправки письма", null, ex); return(false); } }
protected abstract bool OnPrepare(MessageInfo <TMessage> messageInfo, MessageServiceBase <TMessage> service);