Fath Bakri
Fath Bakri

Reputation: 191

send email using SendGrid hung c#

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

Answers (1)

Fath Bakri
Fath Bakri

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

Related Questions