• .NET 通过SmtpClient发送邮件 提示 4.7.1 service unavailable try again later 解决办法


    最近用C#的SmtpClient发送电子邮件碰到这个错误:

    正在处理错误。 服务器响应为:4.7.1 Service unavailable - try again later

    换了其他的SMTP服务器,没有问题,唯独客户使用的这个服务器会报异常。

    使用Foxmail也可以正常发送邮件,但是C#写程序,就不能发送。

    非常好奇,到底是哪里出了问题。于是下载了Wireshark,跟踪了端口为25的TCP数据包(Filter处填:tcp port 25)。

    点击Start开始捕捉数据包。

    从图里可以发现这个服务器非常奇葩的会拒绝一次SMTP协议里的MAIL FROM指令,从而造成异常,再试一次就好了。

    然而C#的SmtpClient类我们没法更改(System.dll),于是谷歌找到了System.Net.Mail.SmtpClient的mono实现,复制了下来,增加了一次登录时错误451的判断,然后重新发送一次去掉了@和域名的,只保留用户名的MAIL FROM信息,就可以成功发送了。

    从Github的SmtpClient源码中,还知道了一个叫做MailKit的开源发送邮件代码,地址是 https://github.com/jstedfast/MailKit

    这个功能比SmtpClient强大很多,但是我的程序都已经完成了,就不再花时间去改了,有时间可以再研究这个软件。

    GitHub 的System.Net.Mail源码在这里:https://github.com/mono/mono/tree/master/mcs/class/System/System.Net.Mail

  • 相关阅读:
    python
    UVA 10891——Game of Sum
    codeforces632E 小偷与商店
    NOIP2007——树网的核
    NOIP2014 提高组 Day2——寻找道路
    nodeoj2000——Freda's Chess
    BZOJ1012——[JSOI2008]最大数maxnumber
    poj2823-Sliding Window
    开博客了,大家好,这是ATHENS的博客。
    Linux简易APR内存池学习笔记(带源码和实例)
  • 原文地址:https://www.cnblogs.com/easyc/p/C_Sharp_SmtpClient_Server_Response_4_7_1_Service_unavailable.html
Copyright © 2020-2023  润新知