当前位置: 技术问答>linux和unix
关于linux下面的SMTP邮件服务器转发程序开发
来源: 互联网 发布时间:2016-11-01
本文导语: 我要做一个SMTP邮件转发服务器,通讯协议部分已经基本完成,但是现在遇到的问题是如何通过客户端发过来的邮箱地址解析对应的SMTP服务器地址,我用system函数执行了nslookup -type=mx 126.com >/root/桌面/ret.dat,先把查...
我要做一个SMTP邮件转发服务器,通讯协议部分已经基本完成,但是现在遇到的问题是如何通过客户端发过来的邮箱地址解析对应的SMTP服务器地址,我用system函数执行了nslookup -type=mx 126.com >/root/桌面/ret.dat,先把查询结果保存到到ret.dat中,然后解析,下面是查询结果
Server: 211.161.46.84
Address: 211.161.46.84#53
Non-authoritative answer:
126.com mail exchanger = 10 126mx01.mxmail.netease.com.
126.com mail exchanger = 10 126mx02.mxmail.netease.com.
126.com mail exchanger = 50 126mx00.mxmail.netease.com.
Authoritative answers can be found from:
126.com nameserver = ns4.nease.net.
126.com nameserver = ns2.nease.net.
126.com nameserver = ns3.nease.net.
ns2.nease.net internet address = 114.113.197.12
ns3.nease.net internet address = 220.181.28.4
ns4.nease.net internet address = 61.135.255.140
我从程序中取出ip地址211.161.46.84,端口号25创建socket进行连接,但是得到错误信息是Connection refused,我不知道是不是我取错了IP地址,下面是我的部分解析地址的源码
Server: 211.161.46.84
Address: 211.161.46.84#53
Non-authoritative answer:
126.com mail exchanger = 10 126mx01.mxmail.netease.com.
126.com mail exchanger = 10 126mx02.mxmail.netease.com.
126.com mail exchanger = 50 126mx00.mxmail.netease.com.
Authoritative answers can be found from:
126.com nameserver = ns4.nease.net.
126.com nameserver = ns2.nease.net.
126.com nameserver = ns3.nease.net.
ns2.nease.net internet address = 114.113.197.12
ns3.nease.net internet address = 220.181.28.4
ns4.nease.net internet address = 61.135.255.140
我从程序中取出ip地址211.161.46.84,端口号25创建socket进行连接,但是得到错误信息是Connection refused,我不知道是不是我取错了IP地址,下面是我的部分解析地址的源码
//直接发送到目的地,
// 参数pHostAddr为"126.com"
int SendSmtpMailDirect(char* pHostAddr) //relay
{
struct hostent* pHost = NULL;
int nSockServer;
char szBuffer[ECHOMAX];
struct sockaddr_in SockAddr;
short sPort = 25;
char pServerAddr[128];
memset(pServerAddr, 0, sizeof(pServerAddr));
/*将查询到的SMTP地址信息保存到文件*/
sprintf(pServerAddr, "nslookup -type=mx %s >./mxAddr.dat", pHostAddr);
if( system(pServerAddr) == -1 )
{
perror("nslookup");
exit(1);
}
FILE* pFile = fopen("./mxAddr.dat", "r");
if(pFile)
{
char strTemp[8];
int bOK = 0;
while( fgets(szBuffer, ECHOMAX, pFile) )
{
strncpy(strTemp, szBuffer, 8);
strTemp[7] = '';
if(strcasecmp(strTemp, "Address") == 0)
{
int i = 8;
int nStart = 0;
/* 找到地址的开始位置 */
for(; i = '0' && szBuffer[i]