我使用SendGrid发送电子邮件.net5 windows服务,当我从Visual本地运行应用程序时,它可以正常工作。但是,当我在Docker中运行应用程序时,它在SendEmailAsync上出现了一个异常。
异常:
远程证书由于证书链中的错误而无效: UntrustedRoot
List<Personalization> personalizations = new List<Personalization>();
Personalization personalization = new Personalization();
personalization.From = new EmailAddress(emailDetails.SenderMailID);
personalization.Tos = GetRecipientsList(emailDetails.RecipientMailID);
personalization.Subject = emailDetails.Subject;
personalizations.Add(personalization);
var msg = new SendGridMessage
{
From = new EmailAddress(emailDetails.SenderMailID),
Subject = emailDetails.Subject
};
msg.AddContent(MimeType.Html, emailDetails.Message);
msg.Personalizations = personalizations;
var sendGridClient = new SendGridClient(apiKey);
var sendGridResponse = await sendGridClient.SendEmailAsync(msg);码头文件:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["src/service/MyWindowsService/MyWindowsService.csproj", "src/service/MyWindowsService/"]
RUN dotnet restore "src/service/MyWindowsService/MyWindowsService.csproj"
COPY . .
WORKDIR "/src/src/service/MyWindowsService"
RUN dotnet build "MyWindowsService.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyWindowsService.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWindowsService.dll"]发布于 2021-12-07 13:42:59
这里的问题似乎是一个不受信任的证书。例如,当证书自签名或使用非公共CA根时,可能会发生这种情况。
在这种情况下,我要做的是将证书或CA复制到基础/最后停靠阶段的路径"/etc/ssl/certs/“。
例如,在停靠文件的第二行中:
副本./server-证书.etc/etc/ssl/certs/server-证书
如果这是你的问题,前面的方法会告诉你。假设这是解决方案,我建议您不要将证书直接复制到您的停靠文件中。例如,在生产环境中,如果您使用的是库伯内特斯( Kubernetes )或特朗码头( trought ),您应该将其作为一个秘密来处理--例如,撰写和卷。
编辑:获取您需要信任的证书,并将其放在Dockerfile的相同路径上。然后编辑您的dockerfile,如下所示:
FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
COPY ./server-certificate.pem /etc/ssl/certs/server-certificate.pem
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["src/service/MyWindowsService/MyWindowsService.csproj", "src/service/MyWindowsService/"]
RUN dotnet restore "src/service/MyWindowsService/MyWindowsService.csproj"
COPY . .
WORKDIR "/src/src/service/MyWindowsService"
RUN dotnet build "MyWindowsService.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MyWindowsService.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWindowsService.dll"]https://stackoverflow.com/questions/70260104
复制相似问题