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());
 }
Exemple #3
0
 /// <summary>
 /// </summary>
 protected sealed override bool OnPrepare(MessageInfo <TMessage> messageInfo, MessageServiceBase <WebApplication, TMessage> service)
 {
     return(OnPrepare(messageInfo, (MessageServiceBase <TMessage>)service));
 }
Exemple #4
0
        /// <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);
            }
        }
Exemple #5
0
 protected abstract bool OnPrepare(MessageInfo <TMessage> messageInfo, MessageServiceBase <TMessage> service);