Как отправлять и отправлять электронную почту через HTTP-запрос

#c# #asp.net #http #smtp

#c# #asp.net #http #smtp

Вопрос:

Я отправлял электронные письма с помощью ASP.NET Метод Smtp, и до сих пор он работал нормально.

Но теперь структура бизнеса, над которым я работаю, изменилась, и они запрашивают новые изменения. Прежде всего, теперь моя структура электронной почты должна быть отправлена в службу электронной почты API вместо определенного адреса электронной почты.

Я некоторое время искал, и я думаю, что мне нужно использовать HttpRequest для этого, но я не совсем одарен при использовании C #. Вот мой фактический код (SMTP):

 protected void Send_Button(object sender, EventArgs e)
{

    // Mailing Initialization
    System.Net.Mail.MailMessage mmsg = new System.Net.Mail.MailMessage();

    mmsg.To.Add("receiver@gmail.com");
    mmsg.Body = TextBox1.Text;

    mmsg.BodyEncoding = System.Text.Encoding.UTF8;
    mmsg.IsBodyHtml = true;
    mmsg.From = new System.Net.Mail.MailAddress("sender@gmail.com");

    System.Net.Mail.SmtpClient cliente = new System.Net.Mail.SmtpClient();

    cliente.Credentials = new System.Net.NetworkCredential("sender@gmail.com", "password");

    cliente.Port = 587;
    cliente.EnableSsl = true;

    cliente.Host = "smtp.gmail.com"; 

    try
    {
        cliente.Send(mmsg);
    }
    catch (Exception)
    {
        string message = "There is an error";
        ClientScript.RegisterStartupScript(typeof(Page), "alert", "<script language=JavaScript>if(window.confirm('"   (message)   "'))</script>");
    }
}
  

Конечно, это нужно изменить. Мне был предоставлен URL-адрес, который является моим направлением API:https://apitp.trial/api/Online/Mail

Протокол должен быть HTTPS, а метод должен быть POST.

Говорю вам, я искал целую вечность, но безуспешно. Есть идеи о том, как структура моей почты должна измениться для достижения этой цели?

Заранее спасибо.

Комментарии:

1. Есть ли у вас какая-либо документация или ссылки на то, как работает API? (т. Е. Формат данных, которые он использует)

2. Да, согласно документам, данные должны иметь такую структуру: code { «Электронная почта»: «neoristelecom@gmail.com «, «CustomerNumber»: 123456789, «ExternalMessageID»: «1-222», «CustomerName»: «Хуан Перес», «CampaignName»: «TestStress — EMAIL», «Extrafields»: «opcional1;opcional2» }

3. Хорошо, похоже, вам нужно отправить свои данные в формате JSON. Вы знаете, есть ли какая-либо аутентификация в API? (т. Е. Токены?)

4. Да, на самом деле. Это довольно сложный процесс. Они предоставляют мне пользователя и пароль. К этому я должен добавить фактическую дату, затем изменить все на Base64 и отправить его через заголовок: «api…….?авторизация: dTExMjIzMzpVRE1yYXZCVTkyMTlka0lkYlZJbHNWME0wd …» — например.

5. Таким образом, создается впечатление, что ваша компания использует базовую аутентификацию в своем веб-API и защищает ее с помощью шифрования Base64. Я пишу кое-что, чтобы помочь вам сейчас, в один момент

Ответ №1:

Итак, похоже, что ваше решение переходит от использования протокола SMTP для отправки сообщений на ваш почтовый сервер к использованию API, который принимает JSON.

Из ваших комментариев я вижу, что он принимает формат JSON, подобный этому:

 {
  "Email": "example@example.com",
  "CustomerNumber": 123456789,
  "ExternalMessageID": "1-222",
  "CustomerName": "John Smith",
  "CampaingName": "A Campaign name",
  "Extrafields": "opcional1;opcional2"
}
  

Я предполагаю, что узел «Extrafields» представляет собой строку, а не массив, поскольку, похоже, он имеет такой формат.

Для работы с Json в C # вам необходимо импортироватьJSON.NET в ваше решение, если вы еще этого не сделали. Затем мы можем использовать ваш существующий обработчик событий в вашем коде выше и использовать его для создания следующего объекта:

 public class MailMessage
{
    public string Email { get; set; }
    public int CustomerNumber { get; set; }
    public string ExternalMessageID { get; set; }
    public string CustomerName { get; set; }
    public string CampaingName { get; set; }
    public string Extrafields { get; set; }
}
  

Затем вы можете использовать JSON.NET сериализовать этот объект в строку JSON и ОПУБЛИКОВАТЬ ее в вашем API в требуемом формате. Но поскольку ваша компания также требует аутентификации, вам нужно будет добавить заголовок к вашему запросу POST. Я бы также рекомендовал использовать RestSharp, чтобы облегчить вам жизнь.

Вы можете использовать что-то вроде следующего, чтобы запустить все это:

 protected void Send_Button(object sender, EventArgs e)
{
    //Creates new MailMessage Object
    MailMessage mm = new MailMessage{
        Email = "someone@example.com",
        CustomerNumber = 123456789,
        ExternalMessageID = "1-222",
        CustomerName = "John Smith",
        CampaingName = "A Campaign name",
        Extrafields = "opcional1;opcional2"
    };

    var client = new RestClient("https://apitp.trial/"); //Makes a RestClient that will send your JSON to the server
    var request = new RestRequest("Online/Mail", Method.POST); //Sets up a Post Request your your desired API address
    request.AddHeader("api........?authorization", "INSERT YOUR BASE64 STRING HERE")
    request.AddHeader("Content-type", "application/json"); //Declares this request is JSOn formatted
    request.AddJsonBody(mm); //Serializes your MailMessage into a JSON string body in the request.
    var response = client.Execute(request); //Executes the Post Request and fills a response variable
}
  

Просто вставьте свои зашифрованные учетные данные Base64 туда, где я указал, и вы можете включить некоторую логику в переменную ответа, чтобы проверить, что она обработана должным образом. В переменной ответа есть StatusCode код 200, который будет указывать на успех.

Комментарии:

1. Извините, мне потребовалось так много времени, чтобы ответить. Это было первоклассное решение! Большое вам спасибо!