Как отправить и по электронной почте через HTTP-запрос - PullRequest
0 голосов
/ 04 апреля 2019

Я отправлял электронные письма, используя метод 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 Ответ

0 голосов
/ 04 апреля 2019

Таким образом, похоже, что ваше решение переходит от использования протокола 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, где я указал, и вы можете включить некоторую логику в переменную ответа, чтобы убедиться, что она обработана правильно.Переменная Response имеет StatusCode, код 200 будет указывать на успех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...