docker通过smtp服务器发送邮件需要哪些额外的工具

我正在编写一个.net核心1.1控制台应用程序。 目标是将其作为托pipe容器内运行的计划作业进行托pipe。

控制台应用程序将使用一个SMTP服务器,并将发送电子邮件。 就那么简单。

但是,在Docker容器中运行应用程序时,我不成功。 我的假设是,如果我们将smtp端口暴露在泊坞窗容器中,应该是smtp服务器工作所需的一切。

docker run -it -p 25:25 --rm courierreports:demo

代码在尝试连接到SMTP服务器时抛出exception。 我是否需要任何其他工具来使我的应用程序工作?

我的机器正在运行Windows 7,我正在使用oracle虚拟箱泊坞。 smtp服务器( org.smtp.com )由我的公司提供,我正在使用端口25

我得到的错误:

 fail: StartupLogs[0] An error occurred. fail: StartupLogs[0] Unable to read data from the transport connection: Connection timed out. fail: StartupLogs[0] at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) at MailKit.Net.Smtp.SmtpStream.ReadAhead(CancellationToken cancellationToken) at MailKit.Net.Smtp.SmtpStream.ReadResponse(CancellationToken cancellationToken) at MailKit.Net.Smtp.SmtpClient.Connect(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken) at MailKit.MailService.Connect(String host, Int32 port, Boolean useSsl, CancellationToken cancellationToken) at Org.Dept.MailkitAdapter.MailkitSendMail.SendMail(MailMessage mailMsg) in C:\Workspace\POC\DotnetCore\Azure\Practice\EmailService\Org.Dept .MailkitAdapter\MailkitSendMail.cs:line 31 at Org.Legal.CourierReports.Logic.EmailProcessor.SendEmail(List`1 model) in C:\Workspace\POC\DotnetCore\Azure\Practice\EmailService\Org.Lega l.CourierReports.Logic\EmailProcessor.cs:line 121 at Org.Legal.CourierReports.Logic.EmailProcessor.TestSend() in C:\Workspace\POC\DotnetCore\Azure\Practice\EmailService\Org.Legal.CourierRepo rts.Logic\EmailProcessor.cs:line 92 at Org.Legal.CourierReports.Console.Program.Main(String[] args) in C:\Workspace\POC\DotnetCore\Azure\Practice\EmailService\Org.Legal.Courier Reports.Console\Program.cs:line 42 

这是我的dockerfile

 FROM microsoft/dotnet:1.1-runtime ARG source WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "Org.Legal.CourierReports.Console.dll"] 

以下是我用来构build和运行Docker容器的命令

 docker build --no-cache -t courierreports:demo . docker run -it -p 25:25 --rm courierreports:demo 

这是代码。 它在以=>表示的行中断开

 using (var client = new SmtpClient()) { client.ServerCertificateValidationCallback = (s, c, h, e) => true; => client.Connect(mailMsg.MailOptions.SmtpHost, mailMsg.MailOptions.SmtpPortNoAuth, false); client.AuthenticationMechanisms.Remove("XOAUTH2"); client.Send(mimeMsg); client.Disconnect(true); }