使用 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,包括 inlineattachment,但都没有生成带附件的电子邮件。

我确实收到了电子邮件,只是没有附件。

如何使用 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));