2016-03-09 46 views
1

以下是我使用SendGrid API发送电子邮件的代码,但附加文件在此处不起作用。 请帮助一样。在MVC API中使用SendGrid Web API,附件不起作用

// Init SmtpClient with credentials from config file 
      var smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp"); 

      string api_user = smtpSection.Network.UserName; 
      string api_key = smtpSection.Network.Password; 
      string toAddress = ConfigHelper.ErrorEmailTO; 
      string toName = strFromName; 
      string subject = Mailsubject; 
      string text = "Test Body..."; 
      string fromAddress = strFromEmail; 
      if (isInTestMode) { 
       fromAddress = ConfigHelper.ErrorEmailTO; 
      } 

      string FileName = ((System.IO.FileStream)(attachments[0].ContentStream)).Name; 
      MemoryStream ms = new MemoryStream(); 
      using (FileStream file = new FileStream(FileName, FileMode.Open, FileAccess.Read)) 
      { 
       byte[] bytes = new byte[file.Length]; 
       file.Read(bytes, 0, (int)file.Length); 
       ms.Write(bytes, 0, (int)file.Length); 
      } 
      ms.Position = 0; 

      byte[] fileData = null; 
      using (var binaryReader = new BinaryReader(ms)) 
      { 
       fileData = binaryReader.ReadBytes(Convert.ToInt32(ms.Length)); 
      } 



      string url = "https://sendgrid.com/api/mail.send.json"; 

      // Create a form encoded string for the request body,Here All Code Except Files parameter is working. 

      string parameters = "api_user=" + api_user + "&api_key=" + api_key + "&to=" + toAddress + 
           "&toname=" + toName + "&subject=" + subject + "&text=" + text + 
           "&from=" + fromAddress + "&files=" + fileData 

      try 
      { 
       WebRequest request = WebRequest.Create(url); 
       request.Method = "POST"; 
       string postData = parameters; 
       byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
       request.ContentType = "application/x-www-form-urlencoded"; 
       request.ContentLength = byteArray.Length; 
       Stream dataStream = request.GetRequestStream(); 
       dataStream.Write(byteArray, 0, byteArray.Length); 
       dataStream.Close(); 

       WebResponse response = request.GetResponse(); 
       Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
       dataStream = response.GetResponseStream(); 
       StreamReader reader = new StreamReader(dataStream); 
       string responseFromServer = reader.ReadToEnd(); 
       Console.WriteLine(responseFromServer); 
       reader.Close(); 
       dataStream.Close(); 
       response.Close(); 
       return true; 
      } 
      catch (WebException ex) 
      { 
       // Catch any execptions and gather the response 
       HttpWebResponse response = (HttpWebResponse)ex.Response; 

       // Create a new read stream for the exception body and read it 
       StreamReader streamReader = new StreamReader(response.GetResponseStream()); 
       string result = streamReader.ReadToEnd(); 

       // Write the results to the console 
       Console.WriteLine(result); 
       return false; 
      } 

现在,上面的代码正在使用我的API凭据发送电子邮件。 电子邮件已成功收到,但它不包含任何附件。

回答

1

请求上的内容类型应该设置为“multipart/form-data”。

+0

它给'request.GetResponse()'错误,所以它不在这里工作。 – ParthKansara

0

它的旧帖子;但仍然张贴解决方案,如果有人需要

foreach(var item in attachments) 
{ 
    //Assuming that attachments as a collection of full file path 
    var data = HttpUtility.UrlEncode(File.ReadAllBytes(item)); 
    var name = System.IO.Path.GetFileName(item); 
    parameters = parameters + "&files[" + name + "]="+data; 
} 
+0

感谢您的回答。它是旧的post.I使用其他方法使其工作,但我无法识别它。 – ParthKansara