以下是我使用SendGrid 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凭据来发送电子邮件。 电子邮件已成功收到,但它不包含任何附件。
答案 0 :(得分:1)
请求中的内容类型应设置为“multipart / form-data”。
答案 1 :(得分: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;
}