예제 #1
0
        private MailGunResponse sendEmail(MailParameters parameters, List <MailAttachments> attachments)
        {
            //parameters for the api request
            var APIMainUri         = SystemVariableServ.GetSystemVariableValue("EmailApiUrl");
            var MailgunDomain      = SystemVariableServ.GetSystemVariableValue("EmailApiDomain");
            var APIMessageEndpoint = SystemVariableServ.GetSystemVariableValue("EmailApiMessageEndpoint");
            var APIUser            = SystemVariableServ.GetSystemVariableValue("EmailApiUsername");
            var APIKey             = SystemVariableServ.GetSystemVariableValue("EmailApiKey");

            RestClient client = new RestClient();

            client.BaseUrl       = new Uri(APIMainUri);
            client.Authenticator = new HttpBasicAuthenticator(APIUser, APIKey);

            RestRequest request = new RestRequest();

            request.Method = Method.POST;
            request.AddParameter("domain", MailgunDomain, ParameterType.UrlSegment);
            request.Resource = "{domain}" + APIMessageEndpoint;

            if (parameters != null)
            {
                foreach (PropertyInfo cProperty in parameters.GetType().GetProperties())
                {
                    var cPropertyName  = cProperty.Name;
                    var cPropertyValue = cProperty.GetValue(parameters);
                    if (cPropertyValue != null)
                    {
                        request.AddParameter(cPropertyName, cPropertyValue);
                    }
                    ;
                }
            }

            if (attachments != null && attachments.Count > 0)
            {
                foreach (var cAttachment in attachments.ToList())
                {
                    request.AddFileBytes("attachment", cAttachment.file, cAttachment.fileName, (cAttachment.contentType));
                }
            }

            //IRestResponse response = client.Execute(request);
            //MailGunResponse result = Deserializer.Deserialize<MailGunResponse>(response.Content);

            MailGunResponse result = new MailGunResponse();

            result.id = "set by async funtionality";
            var Asyncresult = client.ExecuteAsync <MailGunResponse>(request, response => { });

            return(result);
        }
예제 #2
0
        /// <summary>
        /// Pay cash on delivery for a <see cref="MailItem"/> with supplied id.
        /// </summary>
        public void MailPayCod(ulong mailId)
        {
            MailItem mail;

            GenericError GetResult()
            {
                if (!availableMail.TryGetValue(mailId, out mail))
                {
                    return(GenericError.MailDoesNotExist);
                }

                if (!player.CurrencyManager.CanAfford(CurrencyType.Credits, mail.CurrencyAmount))
                {
                    return(GenericError.MailInsufficientFunds);
                }

                if (mail.HasPaidOrCollectedCurrency)
                {
                    return(GenericError.MailBusy);
                }

                return(GenericError.Ok);
            }

            GenericError result = GetResult();

            if (result == GenericError.Ok)
            {
                player.CurrencyManager.CurrencySubtractAmount(CurrencyType.Credits, mail.CurrencyAmount);
                mail.PayOrTakeCash();

                var parameters = new MailParameters
                {
                    RecipientCharacterId = mail.SenderId,
                    SenderCharacterId    = mail.RecipientId,
                    MessageType          = SenderType.Player,
                    Subject      = $"Cash from: {mail.Subject}",
                    MoneyToGive  = mail.CurrencyAmount,
                    DeliveryTime = DeliveryTime.Instant
                };

                SendMail(parameters, Enumerable.Empty <Item>());
            }

            player.Session.EnqueueMessageEncrypted(new ServerMailResult
            {
                Action = 3,
                MailId = mailId,
                Result = result
            });
        }
예제 #3
0
        // TODO: Handle sending mail from auctions to users upon auction end
        // TODO: Handle sending mail from GMs to replace missing items

        private void SendMail(MailParameters parameters, IEnumerable <Item> items)
        {
            var mail = new MailItem(parameters);

            uint index = 0;

            foreach (Item item in items)
            {
                var attachment = new MailAttachment(mail.Id, index++, item);
                mail.AttachmentAdd(attachment);
            }

            // NOTE: outgoing mail is flushed on character save to prevent any issues,
            // this means that instant mail could take up to 60 seconds (by default) to actually arrive
            outgoingMail.Enqueue(mail);
        }
예제 #4
0
        public bool wellcomeEmail(string Email)
        {
            //variables
            string HtmlBody          = string.Empty;
            string Subject           = string.Empty;
            string From              = SystemVariableServ.GetSystemVariableValue("EmailApiEmail");
            string EmailMainTemplate = EmailTemplateServ.getMasterEmailTemplate("EmailEgulfBasicTemplate");

            //instances
            CustomTemplateModel CustomTemplate = new CustomTemplateModel();
            List <CustomTemplateSectionModel> CustomTemplateSections = new List <CustomTemplateSectionModel>();

            //we get email templates
            CustomTemplate         = EmailTemplateServ.getCustomTemplate(null, "WellcomeTemplate");
            CustomTemplateSections = EmailTemplateServ.getCustomTemplateSections(CustomTemplate.CustomTemplateId);

            //we load basic template things and remove innecesary stuffs
            EmailMainTemplate = getReadyMainTemplate(EmailMainTemplate);
            EmailMainTemplate = removeTable(EmailMainTemplate);

            //we get template custom sections
            EmailMainTemplate = buildTemplateSections(EmailMainTemplate, CustomTemplateSections);
            EmailMainTemplate = EmailMainTemplate.Replace("#btn-url#", "");
            EmailMainTemplate = EmailMainTemplate.Replace("#btn-start#", "");
            EmailMainTemplate = EmailMainTemplate.Replace("#btn-end#", "");

            HtmlBody = EmailMainTemplate;
            Subject  = CustomTemplate.Subject;

            MailParameters parameters = new MailParameters();

            parameters.from    = From;
            parameters.to      = Email;
            parameters.subject = Subject;
            parameters.html    = HtmlBody;

            MailGunResponse result = sendEmail(parameters, null);

            if (!string.IsNullOrEmpty(result.id))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #5
0
        /// <summary>
        /// Send mail to self from a creature.
        /// </summary>
        public void SendMail(uint creatureId, DeliveryTime time, uint subject, uint body, IEnumerable <uint> itemIds)
        {
            if (GameTableManager.Instance.Creature2.GetEntry(creatureId) == null)
            {
                throw new ArgumentException($"Invalid creature {creatureId} for mail sender!");
            }

            if (GameTableManager.Instance.LocalizedText.GetEntry(subject) == null)
            {
                throw new ArgumentException($"Invalid localised text {subject} for mail subject!");
            }

            if (GameTableManager.Instance.LocalizedText.GetEntry(body) == null)
            {
                throw new ArgumentException($"Invalid localised text {body} for mail body!");
            }

            var parameters = new MailParameters
            {
                MessageType          = SenderType.Creature,
                RecipientCharacterId = player.CharacterId,
                CreatureId           = creatureId,
                SubjectStringId      = subject,
                BodyStringId         = body,
                DeliveryTime         = time
            };

            var items = new List <Item>();

            foreach (uint itemId in itemIds)
            {
                Item2Entry itemEntry = GameTableManager.Instance.Item.GetEntry(itemId);
                if (itemEntry == null)
                {
                    throw new ArgumentException($"Invalid item {itemId} for mail attachment!");
                }

                var item = new Item(null, itemEntry);
                items.Add(item);
            }

            SendMail(parameters, items);
        }
예제 #6
0
        /// <summary>
        /// Send mail to another <see cref="Player"/>.
        /// </summary>
        public void SendMail(ClientMailSend mailSend)
        {
            player.Session.EnqueueEvent(new TaskGenericEvent <Character>(CharacterDatabase.GetCharacterByName(mailSend.Name),
                                                                         targetCharacter =>
            {
                var items = new List <Item>();
                GenericError GetResult()
                {
                    if (targetCharacter == null)
                    {
                        return(GenericError.MailCannotFindPlayer);
                    }

                    if (targetCharacter.Id == player.CharacterId)
                    {
                        return(GenericError.MailCannotMailSelf);
                    }

                    // TODO: Check that the player is not blocked

                    if (mailSend.CreditsRequested > 0ul && mailSend.CreditsSent > 0ul)
                    {
                        return(GenericError.MailCanNotHaveCoDAndGift);
                    }

                    if (mailSend.CreditsRequested > 0ul && mailSend.Items.All(i => i == 0ul))
                    {
                        return(GenericError.MailFailedToCreate);
                    }

                    if (mailSend.Items.Any(i => i != 0ul))
                    {
                        if (!IsTargetMailBoxInRange(mailSend.UnitId))
                        {
                            return(GenericError.MailMailBoxOutOfRange);
                        }

                        foreach (ulong itemGuid in mailSend.Items.Where(i => i != 0ul))
                        {
                            Item item = player.Inventory.GetItem(itemGuid);
                            if (item == null)
                            {
                                return(GenericError.MailInvalidInventorySlot);
                            }

                            // TODO: Check the Item can be traded.
                            items.Add(item);
                        }
                    }

                    uint cost = CalculateMailCost(mailSend.DeliveryTime, items);
                    if (!player.CurrencyManager.CanAfford(CurrencyType.Credits, cost))
                    {
                        return(GenericError.MailInsufficientFunds);
                    }

                    if (!player.CurrencyManager.CanAfford(CurrencyType.Credits, mailSend.CreditsSent))
                    {
                        return(GenericError.MailInsufficientFunds);
                    }

                    return(GenericError.Ok);
                }

                GenericError result = GetResult();
                if (result == GenericError.Ok)
                {
                    var parameters = new MailParameters
                    {
                        RecipientCharacterId = targetCharacter.Id,
                        SenderCharacterId    = player.CharacterId,
                        MessageType          = SenderType.Player,
                        Subject      = mailSend.Subject,
                        Body         = mailSend.Message,
                        MoneyToGive  = mailSend.CreditsSent,
                        CodAmount    = mailSend.CreditsRequested,
                        DeliveryTime = mailSend.DeliveryTime
                    };

                    foreach (Item item in items)
                    {
                        player.Inventory.ItemRemove(item);
                    }

                    SendMail(parameters, items);

                    uint cost = CalculateMailCost(mailSend.DeliveryTime, items);
                    player.CurrencyManager.CurrencySubtractAmount(CurrencyType.Credits, cost);

                    if (mailSend.CreditsSent > 0ul)
                    {
                        player.CurrencyManager.CurrencySubtractAmount(CurrencyType.Credits, mailSend.CreditsSent);
                    }
                }

                player.Session.EnqueueMessageEncrypted(new ServerMailResult
                {
                    Action = 1,
                    MailId = 0,
                    Result = result
                });
            }));
        }