请教MFC网络编程的邮件收发的问题

波波仔86 波波仔86 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我遇到三个问题,第一个连不上服务器:


//添加配置消息
void CMyDlg::OnPeizhi()
{
// TODO: Add your control notification handler code here
set.DoModal(); //调用设置对话框
if(set.m_port>0&&set.m_port<100)
{
if(set.m_serveradd!=" ") //判断ip地址不能为空
{
addr.sin_family=AF_INET; //为地址结构中的成员变量赋值
addr.sin_port=htons(set.m_port); //为端口号赋值
addr.sin_addr.S_un.S_addr=inet_addr(set.m_serveradd.GetBuffer(1));
//将主机字节顺序的ip地址转换为网络字节顺序
s=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建套接字
if(connect(s,(sockaddr*) &addr,sizeof(addr)) ) //如果绑定成功
{
::SendMessage(statu,SB_SETTEXT,0,(long)"SMPT 服务器信息设置成功并已经连接服务器!");
GetDlgItem(IDC_SENDER)->EnableWindow(true);
GetDlgItem(IDC_RECVER)->EnableWindow(true);
GetDlgItem(IDC_SUBJECT)->EnableWindow(true);
GetDlgItem(IDC_SENDMAIL)->EnableWindow(true);
GetDlgItem(IDC_RECVMAIL)->EnableWindow(true);
GetDlgItem(IDC_MAILTEXT)->EnableWindow(true);
GetDlgItem(IDC_SENDER)->SetWindowText(" ");
}
else
{
MessageBox("请检查网络连接并重新配置服务器信息!");
}
/*
//改变按钮的状态
GetDlgItem(IDC_SENDER)->EnableWindow(true);
GetDlgItem(IDC_RECVER)->EnableWindow(true);
GetDlgItem(IDC_SUBJECT)->EnableWindow(true);
GetDlgItem(IDC_SENDMAIL)->EnableWindow(true);
GetDlgItem(IDC_RECVMAIL)->EnableWindow(true);
GetDlgItem(IDC_MAILTEXT)->EnableWindow(true);
GetDlgItem(IDC_SENDER)->SetWindowText(" ");
::SendMessage(statu,SB_SETTEXT,0,(long)"SMTP服务器设置成功并已经连接服务器!");
MessageBox("服务器的地址不能为空!"); //这个地方有问题,当服务器的地址为空的时候,但是输不出来
*/
}
else
{
MessageBox("服务器的地址不能为空!");
}
}
else
{
MessageBox("端口号的范围在(0~100)之间!");
}

//这个地方有错误可能服务器没有启动起来

char buf[4];
recv(s,buf,4,0); //接收响应的数据
if(atoi(buf)==121) //比较响应数据
{
MessageBox("服务器准备就绪!");
}
else
{
MessageBox("服务器启动服务失败!");
}

}
我用我的电脑输入 ping mail.163.com,返回的ip地址是121开头,而书上给的220,我都试过,还是连不上,端口号是25.


第二个问题就,在密码编记框中输入的还是明文不像*********这样,该怎么设置呢??

第三个就是以“enter”键结束输入密码
if(i>3)
{
CString str;

this->GetWindowText(str); //获取编辑框中的内容

// this->SetPasswordChar(*);
//m_pass.SetPassword(*); 密码没有实现隐藏的功能
//m_pass.SetPasswordChar('*');
if(str.Find("\n")) //以回车键输入结束,这个地方错误
{

}

GetDlgItem(IDC_RECV)->EnableWindow(true);

GetDlgItem(IDC_NEXT)->EnableWindow(true);

}
else
{
i+=1;
}
}

但是我一按enter键,对话框就结束了,再按又出来了。
...全文

相关推荐

vc++邮件收发器,接收邮件程序

vc++编写的基于MFC的邮件收发器,接收邮件程序

xwjth

MFC邮件收发器实战:基于SMTP/POP3协议的C++实现指南

在桌面应用开发中,邮件收发是常见需求,而基于C++的MFC框架实现SMTP/POP3客户端,仍是许多企业级工具和老系统维护的首选方案。SMTP负责发送邮件,POP3负责接收,二者基于TCP协议,通过命令与状态码完成交互,其中涉及MIME格式组装、Base64编码、UTF-8转换等底层细节。理解这套协议栈,不仅能独立实现邮件功能,也能为跨语言迁移打下基础。该技术常用于自动化报表发送、内网办公系统集成、旧系统功能扩展等场景,尤其在需要纯C++、不依赖外部运行环境时,MFC的CAsyncSocket和CSocke

白条说再来一碗

C++实现的电子邮件收发系统项目实战(VC 6.0 + MFC)

状态描述可执行命令Closed初始或断开状态无等待登录登录成功,可操作邮件Update客户端发送 QUIT 后触发自动执行清理状态迁移由特定事件驱动。例如,未认证前发送STAT将被拒绝;而一旦进入事务状态,即可对邮件执行标记删除等操作。值得注意的是,POP3 中的“删除”并非即时生效。客户端需显式发送来标记某封邮件为待删状态。服务器仅在收到QUIT命令后才真正清除这些邮件。

屁伦

MFC邮件收发器开发实战:SMTP与POP3协议实现及踩坑记录

邮件收发是网络编程中的经典场景,其底层依赖SMTP与POP3两种应用层协议。SMTP负责邮件发送,通过文本命令与服务器交互,涉及EHLO、AUTH、MAIL、RCPT、DATA等指令;POP3则用于接收邮件,以USER、PASS、STAT、RETR等命令完成认证与取信。理解协议的状态码、Base64编码机制以及MIME邮件格式,是稳定实现邮件功能的核心基础。在C++与MFC框架下,开发者还需关注Socket阻塞超时、工作线程与UI的消息同步、SSL加密连接以及中文字符集转换等工程化问题。这类能力广泛应用于内

清浅池塘

用MFC和CSocket实现SMTP/POP3邮件收发:协议流程与工程实践

在Windows网络编程中,SMTP与POP3是邮件收发的基础协议,其本质是基于ASCII文本的命令-响应交互。通过MFC中的CSocket封装底层Winsock细节,开发者可以直观理解TCP连接、命令发送与状态码解析,无需引入重量级第三方库。这种轻量级实现方式不仅适合教学,也能快速嵌入C++桌面应用,用于服务器告警通知或数据上报等场景。文章从邮件协议的核心流程切入,对比SMTP寄信与POP3取信的“订单式”对话,剖析状态码、\r\n行结束符、多行响应等易错细节,并结合分层架构、工作线程与BASE64编码,

今融道
评论 1
收藏 已收藏
分享
返回顶部
波波仔86
网络编程 18,356 成员 64,161 内容