使用 Mailgun 和 Httpclient 发送带附件的邮件
Sending email with attachments using Mailgun and Httpclient
尝试使用 Mailgun 和 dotnet 核心 Azure 函数中的 Httpclient 发送带附件的电子邮件。
Mailguns 文档使用 RestClient,我不想使用它或将其引入代码库,而且我很难让附件与 HttpClient 一起工作。
虽然答案似乎不适用于 Mailgun API 的 v3,但这个问题与我的完全相同。
代码的重要部分如下所示:
var formContent = new MultipartFormDataContent();
formContent.Add(new StringContent($"Testing This thing <{_settings.CurrentValue.MailgunFrom}>"), "from");
formContent.Add(new StringContent(string.Join(",", to)), "to");
formContent.Add(new StringContent(subject), "subject");
formContent.Add(new StringContent(body), "text");
ByteArrayContent fileContent = new ByteArrayContent(theBytes);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "Daily report",
FileName = System.IO.Path.GetFileName(somelongFilepath)
};
formContent.Add(fileContent);
var result = _httpClient.PostAsync($"v3/{_settings.CurrentValue.MailgunDomain}/messages", formContent).Result;
result.EnsureSuccessStatusCode();
我尝试了各种 ContentDispositon,包括 inline
和 attachment
,但都没有生成带附件的电子邮件。
我确实收到了电子邮件,只是没有附件。
如何使用 HTTPClient 发送电子邮件并包含附件?
问题在于您为 body 文件指定的名称(不是文件名或标题)
作为官方文档
ContentDispositionHeaderValue.Name is the the name for the content body part.
并且 mailgun 的文档提到参数名称应该是 'attachment' 所以你可以将你的代码更改为这个
fileContent.Headers.ContentDisposition = new
ContentDispositionHeaderValue("form-data")
{
Name = "attachment",
FileName = System.IO.Path.GetFileName(somelongFilepath)
};
或者更清楚这个
formContent.Add(fileContent, 'attachment', System.IO.Path.GetFileName(somelongFilepath));
尝试使用 Mailgun 和 dotnet 核心 Azure 函数中的 Httpclient 发送带附件的电子邮件。
Mailguns 文档使用 RestClient,我不想使用它或将其引入代码库,而且我很难让附件与 HttpClient 一起工作。
虽然答案似乎不适用于 Mailgun API 的 v3,但这个问题与我的完全相同。
代码的重要部分如下所示:
var formContent = new MultipartFormDataContent();
formContent.Add(new StringContent($"Testing This thing <{_settings.CurrentValue.MailgunFrom}>"), "from");
formContent.Add(new StringContent(string.Join(",", to)), "to");
formContent.Add(new StringContent(subject), "subject");
formContent.Add(new StringContent(body), "text");
ByteArrayContent fileContent = new ByteArrayContent(theBytes);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "Daily report",
FileName = System.IO.Path.GetFileName(somelongFilepath)
};
formContent.Add(fileContent);
var result = _httpClient.PostAsync($"v3/{_settings.CurrentValue.MailgunDomain}/messages", formContent).Result;
result.EnsureSuccessStatusCode();
我尝试了各种 ContentDispositon,包括 inline
和 attachment
,但都没有生成带附件的电子邮件。
我确实收到了电子邮件,只是没有附件。
如何使用 HTTPClient 发送电子邮件并包含附件?
问题在于您为 body 文件指定的名称(不是文件名或标题) 作为官方文档
ContentDispositionHeaderValue.Name is the the name for the content body part.
并且 mailgun 的文档提到参数名称应该是 'attachment' 所以你可以将你的代码更改为这个
fileContent.Headers.ContentDisposition = new
ContentDispositionHeaderValue("form-data")
{
Name = "attachment",
FileName = System.IO.Path.GetFileName(somelongFilepath)
};
或者更清楚这个
formContent.Add(fileContent, 'attachment', System.IO.Path.GetFileName(somelongFilepath));