blo*_*s4t 5 smtp exception docker mailkit
我正在编写一个 .net core 1.1 控制台应用程序。目标是将其托管为在 docker 容器内运行的计划作业。
控制台应用程序将使用 smtp 服务器并发送电子邮件。就那么简单。
但是,我在 docker 容器内运行应用程序时没有成功。我的假设是,如果我们将 smtp 端口暴露在 docker 容器之外,那么 smtp 服务器就可以正常工作了。
docker run -it -p 25:25 --rm courierreports:demo
尝试连接到 smtp 服务器时,代码抛出异常。我需要任何其他工具才能使我的应用程序正常运行吗?
我的机器运行的是 Windows 7,我正在使用 Oracle Virtual Box for 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
Run Code Online (Sandbox Code Playgroud)
这是我的 dockerfile
FROM microsoft/dotnet:1.1-runtime
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "Org.Legal.CourierReports.Console.dll"]
Run Code Online (Sandbox Code Playgroud)
以下是我用来构建和运行 docker 容器的命令
docker build --no-cache -t courierreports:demo .
docker run -it -p 25:25 --rm courierreports:demo
Run Code Online (Sandbox Code Playgroud)
这是代码。它在 指示的行处中断=>
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1668 次 |
| 最近记录: |