#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. Извините, мне потребовалось так много времени, чтобы ответить. Это было первоклассное решение! Большое вам спасибо!