我正在编写一个.net核心1.1控制台应用程序。目标是将此托管作为在docker容器内运行的预定作业。
控制台应用程序将使用smtp服务器并将发送电子邮件。就那么简单。
但是,在docker容器中运行应用程序时,我没有成功。我的假设是,如果我们将smtp端口暴露在docker容器之外,那么它应该是smtp服务器工作所需的全部内容。
docker run -it -p 25:25 --rm courierreports:demo
代码在尝试连接到smtp服务器时抛出异常。我需要任何其他工具才能使我的应用程序正常工作吗?
我的机器正在运行Windows 7,我正在使用oracle虚拟机箱作为docker。 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"]
以下是我用来构建的命令&运行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);
}