1
我目前使用Mailgun通過他們的REST API服務在我的應用程序內執行一些電子郵件發送。他們的例子使用RestSharp,在我的項目中已經有一個MS Web API休息客戶端,我不願意爲此功能安裝另一個客戶端。標準電子郵件使用HttpClient工作正常,但是當涉及到添加附件時,我略微不知所措。HttpClient中的電子郵件附件
有代碼是帶有附件發送電子郵件如下...
RestClient client = new RestClient();
client.BaseUrl = new Uri("https://api.mailgun.net/v3");
client.Authenticator = new HttpBasicAuthenticator("api", "MailgunKeyGoesHere");
RestRequest request = new RestRequest();
request.AddParameter("domain",
"mailgundomain.mailgun.org", ParameterType.UrlSegment);
request.Resource = "{domain}/messages";
request.AddParameter("from", "Mailgun Sandbox <[email protected]>");
request.AddParameter("to", "My Email <[email protected]>");
request.AddParameter("subject", "Hello");
request.AddParameter("text", "This is the test content");
request.AddFile("attachment", Path.Combine("C:\\temp", "test.jpg"));
request.Method = Method.POST;
client.Execute(request);
這工作得很好,因爲我在測試Linqpad這個運行。然而我的代碼並不是我看不到要做什麼的。
var client = new HttpClient();
client.BaseAddress = new Uri(string.Format("{0}/{1}/messages", @"https://api.mailgun.net/v3", "mailgundomain.mailgun.org"));
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "MailgunKeyGoesHere");
var kvpContent = new List<KeyValuePair<string, string>>
{
new KeyValuePair<string, string>("Content-Disposition: form-data; name=\"from\"", "Mailgun Sandbox <[email protected]>"),
new KeyValuePair<string, string>("Content-Disposition: form-data; name=\"subject\"", "Test Email"),
new KeyValuePair<string, string>("Content-Disposition: form-data; name=\"text\"", "It Worked!!"),
new KeyValuePair<string, string>("Content-Disposition: form-data; name=\"to\"", "My Email <[email protected]>"),
};
var fileData = File.ReadAllBytes(@"C:\Temp\test.jpg");
//This is where it goes wrong. I know at the moment fileData.ToString() is wrong but this is the last thing I tried
kvpContent.Add(new KeyValuePair<string, string>("Content-Disposition: form-data; name=\"attachment\"; filename=\"test.jpg\" Content-Type: application/octet-stream",
fileData.ToString()));
var formContent = new FormUrlEncodedContent(kvpContent);
var response = client.PostAsync(client.BaseAddress, formContent).Result;
任何想法?