c - C语言连接邮件服务器的方法

标签 c sockets email unix smtp

我试图连接到局域网中的邮件服务器。邮件服务器的ip是192.168.1.1。所以,我尝试了 下面的程序来测试。

程序:

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
int main()
{
    struct sockaddr_in sa;
    struct in_addr ip;

    int fd=socket(AF_INET,SOCK_STREAM,0);

    if(inet_pton(AF_INET,"192.168.1.1",&ip)==-1){
        printf("Unable to convert ip to binary\n");
        perror("");
        exit(1);
    }

    sa.sin_family=AF_INET;
    sa.sin_port=25;
    sa.sin_addr=ip;

    if(connect(fd,(struct sockaddr*)&sa,sizeof(sa))==-1){
        printf("Unable to connect to server\n");
        perror("");
        exit(1);
    }
    else{
        printf("Successfully connected to server...\n");
    }
}

输出:

$ ./a.out 
Unable to connect to server
Connection refused
$

但是通过telnet,连接成功如下图。

$ telnet 192.168.1.1 25
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
220 mail.msys.co.in ESMTP Postfix (Debian/GNU)
^]
telnet> Connection closed.
$

那么,我在这里犯了什么错误。我的程序有什么问题吗?我请求您帮助我解决这个问题以及它发生的原因。

最佳答案

通过 wireshark 跟踪,您可以看到您的代码尝试连接到端口 6400。尝试:

sa.sin_port=htons(25);

关于c - C语言连接邮件服务器的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35239576/

相关文章:

javascript - node.js 在回调问题中表达 res.send

HTML 电子邮件无间距

javascript - 如何在网站中导入来自各个电子邮件服务提供商的电子邮件联系人?

c++ - 如何在使用 dirent.h 阅读时跳过目录

c - 无限递归 main() 中出现段错误后的不同运行时间

c - 在运行时初始化二维数组并允许用户输入

php - PHP的fsockopen、fread、fwrite、fclose有C++版本吗?

php - 同一台机器上的套接字连接,PHP 到 C++ 并返回

email - 在 Heroku 上接收电子邮件

c++ - 这个枚举声明是否符合标准?