Docker通过smtp服务器发送电子邮件需要哪些其他工具

时间:2017-08-08 19:56:38

标签: exception docker smtp mailkit

我正在编写一个.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);
}

0 个答案:

没有答案