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); }
/// <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 }); }
// 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); }
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); } }
/// <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); }
/// <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 }); })); }