smtp中出现反垃圾邮件的提示的解决办法

这个问题刚开始查找的时候已经想到了通过抓包:用抓包工具抓从pc机发往目的邮箱的方法来分析。对比我们产品的实现步骤的话只发现EHLO这个命令一发送过去就被服务认为是垃圾邮件了,也只有参数的问题了,不然在这一个命令下不会出现别的原因,因为我们原来是通过直接将服务器发过来的欢迎信息去掉了响应码后面的部分直接添加在了EHLO命令后面,会存在类似mail.mail41.com(即服务器的域名)之类的字符串,看rfc2821 EHLO命令的格式是:EHLO SP Domin(后跟sp)sp域其实可以是IP地址或者是主机域名.但是实际上填写别的任意字符串也可以,只要不是有域但是它却无法解析的这种情况存在,要表示这个向服务器打招呼的操作是和别的不一样。

      把命令后面的参数设置成用工具抓取的字符串没有了这个问题,但是按照rfc的标准文档来,这个参数只要每个设备进行发送邮件的时候能够保证唯一即可,解决方法可以是:[设备名]mac地址(注意:不能有-,:等特殊字符,不然可能不能兼容其它的邮件服务器.).

      char szMac[20] = {0};

      if(!p_NetIf->GetMACaddressExEx(szMac,"eth0"))

      {

           return -1;

      }

      strcpy(buf, "EHLO IPC ");

      strcat(buf,szMac);

      strcat(buf,"/r/n");

 

另外一个非常需要注意的问题就是格式”/r/n”,这个是smtp开发最忌讳犯的错误,因为这个问题是很容易引起其它很难查找的问题,我深有体会。刚开始我遗漏了最后一句,然后客户端发送这个命令过去,且发送成功,但是当要读取sock里面的数据的时候却什么也读不到(也就是服务器不能识别你发过去的命令,也即无法对你发过去的命令做出相应的响应),用select进行选择读取并轮旬读取数据都是不能读取到数据.所以需要注意格式问题

你可能感兴趣的:(服务器,文档,工具,产品,邮件服务器)