Reputation: 191
i try to send email using sendgrid api, here is my code:
using SendGrid;
using SendGrid.Helpers.Mail;
public static string Send(
string APIKey,
string Message,
string SenderEmail,
List<string> Receivers,
string Subject)
{
try
{
Task<string> b = Execute(APIKey,
Message,
SenderEmail,
Receivers,
Subject);
b.Wait();
if (b.Result == "True")
{
return "True";
}
else
{
return b.Result;
}
}
catch (Exception ex)
{
return ex.Message + " - " + ex.StackTrace.ToString();
}
}
private static async Task<string> Execute(
string APIKey,
string Message,
string SenderEmail,
List<string> Receivers,
string Subject)
{
try
{
var client = new SendGridClient(APIKey);
var from = new EmailAddress(SenderEmail);
var subject = Subject;
var to = new EmailAddress(Receivers[0]);
var plainTextContent = Message;
var htmlContent = "<strong>" + Message + "</strong>";
var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
MessageBox.Show("before");
var response = await client.SendEmailAsync(msg).ConfigureAwait(true);
return response.IsSuccessStatusCode + "";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " - " + ex.StackTrace.ToString());
return ex.Message + " - " + ex.StackTrace.ToString();
}
}
but it hung forever no any response, knowing when i send via sendgrid smtp it working fine,when i set ConfigureAwait to false ,it return error:
var response = await client.SendEmailAsync(msg).ConfigureAwait(false);
here is the exception:
An error occurred while sending the request. - at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at SendGrid.Helpers.Reliability.RetryDelegatingHandler.<SendAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at SendGrid.BaseClient.<MakeRequest>d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at SendGrid.BaseClient.<RequestAsync>d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at SendGrid.BaseClient.<SendEmailAsync>d__22.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at EasyWhatsappSender.Classes.EmailClasses.SenderEmailClasses.SendGridSender.<Execute>d__1.MoveNext() in E:\my projects do not delete it\EasySender\Classes\EmailClasses\SenderEmailClasses\SendGridSender.cs:line 64
i use dot net framework 4.7 and sendgrid 9.28.1, please help me to fix the problem.
Upvotes: -1
Views: 341
Reputation: 191
since no one answer my question , i end up using normal HttpWebRequest , and it worked fine:
public static string SendViaAPI(
string APIKey,
string Message,
string SenderEmail,
List<string> Receivers,
string subject)
{
try
{
string ReceiversList = "";
foreach (string Receiver in Receivers)
{
if (ReceiversList == "")
{
ReceiversList = @"{
'email': '" + Receiver + @"'
}";
}
else
{
ReceiversList +=","+ Environment.NewLine+ @"{
'email': '" + Receiver + @"'
}";
}
}
var data = @"{
'personalizations': [
{
'to': [
"+ReceiversList+@"
],
'subject': '" + subject + @"'
}
],
'from': {
'email': '" + SenderEmail + @"'
},
'content': [
{
'type': 'text/html',
'value': '" + Message + @"'
}
]
}";
var json = JsonConvert.DeserializeObject<object>(data);
string address = "https://api.sendgrid.com/v3/mail/send";
ServicePointManager.Expect100Continue = true;
const SecurityProtocolType tls13 = (SecurityProtocolType)12288;
System.Net.ServicePointManager.SecurityProtocol =
System.Net.SecurityProtocolType.Tls11
| System.Net.SecurityProtocolType.Ssl3
| System.Net.SecurityProtocolType.Tls
| System.Net.SecurityProtocolType.Tls12
| tls13;
// Skip validation of SSL/TLS certificate
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
request.Method = "POST";
request.KeepAlive = false;
request.ContentType = "application/json";
request.Headers.Add("Authorization", "Bearer " + APIKey);
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
return streamReader.ReadToEnd();
}
}
catch (Exception ex)
{
return ex.Message + " - " + ex.StackTrace.ToString();
}
}
Upvotes: 0