将存储在S3桶中的Amazon SES邮件转换为MimeMessage类型(MimeKit)



我需要阅读传入的电子邮件消息,具有以下约束:

  1. AnAmazon SES
  2. 将收到的邮件存储到S3桶;
  3. 这些邮件需要转换到MimeMessage类型,以便与遗留代码一起工作。

事情是当我尝试将电子邮件转换为MimeMessage时,我得到异常"文件名,目录名或卷标签语法不正确。">

我如何使转换到MimeMessage工作?我应该用正则表达式解析电子邮件消息的内容吗?

我知道我可以将Amazon SES与Amazon WorkMail集成在一起,以Mime格式接收我的消息,这对我来说会更容易。但如果可以的话,我会避免订阅亚马逊的另一项付费服务。

为了更好地说明这个问题,我把我的代码和错误信息都贴在下面:

public GetMailController(AmazonS3Client s3Client, IConfiguration configuration)
{
_s3Client = s3Client;
_config = configuration;
}
[HttpGet(Name = "Get")]
public IEnumerable<MimeMessage> Get()
{
string AwsS3Bucket = _config.GetValue<string>("AwsS3Bucket");
List<MimeMessage> mails = new();
List<string> bucketKeys = GetBucketIds();
foreach (string k in bucketKeys)
{
GetObjectResponse response = _s3Client.GetObjectAsync(new GetObjectRequest() { BucketName = AwsS3Bucket, Key = k }).GetAwaiter().GetResult();
using (Stream responseStream = response.ResponseStream)
using (StreamReader reader = new StreamReader(responseStream))
{
string content = reader.ReadToEnd();
try
{

var mail = MimeMessage.LoadAsync(content).GetAwaiter().GetResult(); // Exception: "The filename, directory name or volume label syntax is incorrect."
mails.Add(mail);
}
catch (Exception exc)
{
return null;
}
}
}
return mails;
}

结果错误信息

The filename, directory name or volume label syntax is incorrect. 

我尝试使用MimeKit方法MimeMessage.Load()来解析MIME格式的电子邮件消息,但却得到了一个异常:The filename, directory name or volume label syntax is incorrect.

MimeMessage.Load()方法期望接收文件名(文件路径)或流作为参数。

由于您提供给它的是与流等价的字符串,因此它认为您提供给它的是文件名—因此filename错误。

直接使用您从GetObjectResponse获得的流,如下所示:

GetObjectResponse response = _s3Client.GetObjectAsync(new GetObjectRequest() { BucketName = AwsS3Bucket, Key = k }).GetAwaiter().GetResult();
using (Stream responseStream = response.ResponseStream)
{
try
{
var mail = MimeMessage.Load(responseStream);
mails.Add(mail);
}
catch (Exception exc)
{
return null;
}
}

我还建议使用await而不是.GetAwaiter().GetResult()

相关内容

  • 没有找到相关文章

最新更新