【问题标题】:.Net SMTP client not working with postfix smtp server on linux.Net SMTP 客户端无法与 Linux 上的 postfix smtp 服务器一起使用
【发布时间】:2020-06-08 21:47:10
【问题描述】:

我正在使用 .Net Core 3.1 下面给出的是我的简单代码

static async System.Threading.Tasks.Task Main(string[] args)
{
    var smtpClient = new SmtpClient()
    {
        Host = "leadsearch.localdomain",
        Port = 25,
        EnableSsl = true,
        UseDefaultCredentials = true
    };
    var msg = new MailMessage("noreply@myhost.com", "mypersonalemail@gmail.com");
    msg.Subject = "Sent from Abdul Moiz";
    msg.Body = "<h1>Moiz Body of msg</h1>";
    msg.IsBodyHtml = true;
    await smtpClient.SendMailAsync(msg);
    Console.WriteLine("Done!!!");
}

但是,我的后缀配置正确并且正在发送电子邮件,我使用以下命令对其进行了测试。

echo "This is the body of the email" | mail -s "This is the subject line" mypersonalemail@gmail.com

然后我进入我的收件箱,在垃圾邮件文件夹中找到了电子邮件,我尝试从终端多次运行它,它在终端上运行得非常好。但是当我尝试使用上面给出的 c# 代码发送它时,我得到了这个错误。

Unhandled exception. System.Net.Mail.SmtpException: Failure sending mail.
 ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name or service not known
   at System.Net.Dns.InternalGetHostByName(String hostName)
   at System.Net.Dns.ResolveCallback(Object context)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(Exception source)
   at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
   at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
   at System.Net.Sockets.Socket.DoDnsCallback(IAsyncResult result, MultipleAddressConnectAsyncResult context)
   at System.Net.Sockets.Socket.DnsCallback(IAsyncResult result)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(Exception source)
   at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
   at System.Net.Sockets.TcpClient.EndConnect(IAsyncResult asyncResult)
   at System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.InitializeConnectionCallback(IAsyncResult result)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw(Exception source)
   at System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult result)
   at System.Net.Mail.SmtpTransport.EndGetConnection(IAsyncResult result)
   at System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult result)
   --- End of inner exception stack trace ---
   at MailSenderConsoleApp.Program.Main(String[] args) in C:\Users\moiz.baig\source\repos\MailSenderConsoleApp\MailSenderConsoleApp\Program.cs:line 25
   at MailSenderConsoleApp.Program.<Main>(String[] args)
Aborted (core dumped)

当我检查 here 提到的我的 localhost SMTP 服务器主机名时,我得到了以下结果

postconf -d myhostname
myhostname = leadsearch.localdomain

我的 Linux 操作系统详细信息,我的构建部署在哪里:

Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
Codename:       bionic

我不知道我做错了什么,但这根本不起作用

【问题讨论】:

    标签: c# linux .net-core smtp


    【解决方案1】:

    您的错误输出显示at System.Net.Dns.InternalGetHostByName(String hostName)

    这意味着您运行此代码的机器不知道 leadsearch.localdomain 对应的 IP 地址。当然在 linux 上它确实如此,它就是它自己。

    所以有 2 个选择。配置 DNS 以使用适当的leadsearch.localdomain 地址进行响应,或在本地主机文件中定义它。

    您的本地主机文件位于C:\Windows\System32\drivers\etc\hosts

    【讨论】:

      猜你喜欢
      • 2014-07-16
      • 2014-06-01
      • 2015-05-18
      • 2020-09-03
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 2014-12-19
      • 2014-07-07
      相关资源
      最近更新 更多