首页 > 解决方案 > 将文件附加到 System.Net.Mail 时出错。如何修复此错误?

问题描述

尝试发送带有附件的电子邮件。但是我收到一个错误:

“无法从 'System.Threading.Tasks.Task' 转换为 'System.Net.Mail.Attachment'

我的错误发生在该行 Attachments.Add(GetAttachment(attachmentFileName));

我尝试了各种转换(参见代码),但我不太明白问题出在哪里。我知道解决方案就在我面前,但我没有看到。

public class NonFERosterEmail : BaseNotificationEmail<OfferViewModel>
{
    public NonFERosterEmail(OfferViewModel vm, string emailList, string attachmentFileName) : base(vm)
    {
        To.AddRange(GetTo(emailList));
        Body = GetBody();
        Subject = GetSubject();
        //Attachments.Add(new Attachment(GetAttachment(attachmentFileName)));
        Attachments.Add(GetAttachment(attachmentFileName));
        From = new MailAddress(ConfigurationManager.AppSettings["RedirectEmailTo"]);
    }

    //public async Task<List<Attachment>> GetAttachment(string attachmentFileName)
    public async Task<Attachment> GetAttachment(string attachmentFileName)
    {
        //var ret = new List<Attachment>();

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["azureStorageAccount"]); 
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference("attachments");
        CloudBlockBlob blob = container.GetBlockBlobReference(attachmentFileName);

        var contentType = MimeMapping.GetMimeMapping(attachmentFileName);
        Stream target = new MemoryStream();
        await blob.DownloadToStreamAsync(target);
        target.Position = 0;
        //ret.Add(new Attachment(target, attachmentFileName, contentType));

        Attachment ret = new Attachment(target, attachmentFileName, contentType);

        return ret;
    }

//remainder of code left out for brevity
}

我希望GetAttachment返回一个正确的 Attachment 对象,该对象将被添加到 Mail 对象中并成功发送。

标签: c#

解决方案


要从 a 中获取值Task<T>,您必须制定方法asyncawait任务。


推荐阅读